#include <iostream>
#include <vector>
#include <unordered_map>
#include <cmath>
using namespace std;

bool prime (int x){ //функция для проверки простоты нечётного числа
	bool pr=true;
	for(int i=2; i<=sqrt(x);i++)if(!(x%i))pr=false;
	return pr;
}
int main() {
	vector <int> v,prime_v;
	unordered_map <int,bool> prime_m;
	int u,i,j,maxx=0;
	while(cin>>u){
		v.push_back(u);
		maxx=max(maxx,u);//максимальное значение во входном потоке
	}
	for(i=3;i<=maxx;i+=2){
		if(prime(i)){
			prime_m[i]=true;
			prime_v.push_back(i); 
		}
	}
	int *dp,k;
	dp = new int [maxx+1];
	for(i=0;i<=maxx;i++)dp[i]=0;
	for(i=8;i<=maxx;i++){//динамика
		if(i%2){
			for(j=0;(j<prime_v.size())&&(prime_v[j]<i);j++){
				k=i-prime_v[j];
				if(dp[k]){
					dp[i]+=dp[k];
					if((prime_m[k-prime_v[j]])&&((k-prime_v[j])!=prime_v[j]))--dp[i];
				}
			}
		}
		else{
			for(j=0;(j<prime_v.size())&&(prime_v[j]<(i/2));j++){
				k=i-prime_v[j];
				if(prime_m[k])dp[i]++;
			}
		}
		if(i%2)dp[i]/=3;
	}
	for(i=0;i<v.size();i++)cout<<dp[v[i]]<<'\n';
	return 0;
}