A space hunter, Ken Marineblue traveled the universe, looking for the space coconut crab. The space coconut crab was a crustacean known to be the largest in the universe. It was said that the space coconut crab had a body of more than 400 meters long and a leg span of no shorter than 1000 meters long. Although there were numerous reports by people who saw the space coconut crab, nobody have yet succeeded in capturing it.

After years of his intensive research, Ken discovered an interesting habit of the space coconut crab. Surprisingly, the space coconut crab went back and forth between the space and the hyperspace by phase drive, which was the latest warp technology. As we, human beings, was not able to move to the hyperspace, he had to work out an elaborate plan to capture them. Fortunately, he found that the coconut crab took a long time to move between the hyperspace and the space because it had to keep still in order to charge a sufficient amount of energy for phase drive. He thought that he could capture them immediately after the warp-out, as they moved so slowly in the space.

He decided to predict from the amount of the charged energy the coordinates in the space where the space coconut crab would appear, as he could only observe the amount of the charged energy by measuring the time spent for charging in the hyperspace. His recent spaceship, Weapon Breaker, was installed with an artificial intelligence system, CANEL. She analyzed the accumulated data and found another surprising fact; the space coconut crab always warped out near to the center of a triangle that satisfied the following conditions:

* each vertex of the triangle was one of the planets in the universe;
* the length of every side of the triangle was a prime number; and
* the total length of the three sides of the triangle was equal to T, the time duration the space coconut crab had spent in charging energy in the hyperspace before moving to the space.



CANEL also devised the method to determine the three planets comprising the triangle from the amount of energy that the space coconut crab charged and the lengths of the triangle sides. However, the number of the candidate triangles might be more than one.

Ken decided to begin with calculating how many different triangles were possible, analyzing the data he had obtained in the past research. Your job is to calculate the number of different triangles which satisfies the conditions mentioned above, for each given T.



Input

The input consists of multiple datasets. Each dataset comes with a line that contains a single positive integer T (1 ≤ T ≤ 30000).

The end of input is indicated by a line that contains a zero. This should not be processed.

Output

For each dataset, print the number of different possible triangles in a line. Two triangles are different if and only if they are not congruent.

Example

Input

10
12
15
777
4999
5000
0


Output

0
1
2
110
2780
0
#include <stdio.h>
#include <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <fstream>
#include <algorithm>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <complex>
#include <iterator>
#include <cstdlib>

using namespace std;

#define EPS (1e-10)
#define EQ(a,b) (abs((a) - (b)) < EPS)
#define EQV(a,b) (EQ((a).real(),(b).real()) && EQ((a).imag(),(b).imag()))

typedef complex<double> P;
typedef long long ll;

const int MAX_SIZE = 10000;
const int MAX_PRIME = 30001;

int prime[MAX_PRIME+1];
bool isPrime[MAX_PRIME+1];
int p;

void erats(){
  // primeツδ環スツトツづーツ渉可甘コツ可サ
  fill(isPrime,isPrime+MAX_PRIME,true);
  p = 0;
  isPrime[0] = isPrime[1] = false;
  
  for(int i = 2; i <= MAX_PRIME; i++){
    if(isPrime[i]){
      prime[p++] = i;
    }
    else
      continue;
    
    // ツづ督づゥツつ「ツづ可つゥツつッツづゥ
    for(int j = 2*i; j <= MAX_PRIME; j+=i){
      isPrime[j] = false;
    }
    //cout << flush;
  }
}

int main(){

  int n;
  erats();
  //cout<<p<<endl;
  while(cin>>n&&n!=0){
    int cnt=0;
    int left=n;
    for(int i = 0; i < p; i++){
      int left=n-prime[i];
      if(left<prime[i])
	break;
      for(int j = i; j < p; j++){
	int lleft=left-prime[j];
	if(lleft>=prime[j]){
	  if(isPrime[lleft]){
	    if(prime[i]+prime[j]>lleft)
	      cnt++;
	  }
	}
	else
	  break;
      }
    }
    cout<<cnt<<endl;
  }

  return 0;
}