#include using namespace std; using ll = long long; template using vt = vector; template using vvt = vector>; template using ttt = tuple; using tii = tuple; using vi = vector; #define rep(i,n) for(int i=0;i<(int)(n);i++) #define pb push_back #define mt make_tuple #define ALL(a) (a).begin(),(a).end() #define FST first #define SEC second #define DEB cerr<<"!"<0){if((n&1)==1)r=r*x%m;x=x*x%m;n>>=1;}return r%m;} inline ll lcm(ll d1, ll d2){return d1 / __gcd(d1, d2) * d2;} const int IINF = (INT_MAX/2); const ll LLINF = (LLONG_MAX/2); const double eps = 1e-8; /*Coding Space*/ int main(){ ll a,b,c,d,e,f,x; cin >> x; map m; ll ans = 0; // Dを決め打ちすると、cのfor更新がさぼれる for(d = 0; d < 301; ++d){ c = d; for(b = 0; b <= c; ++b)for(a = 0; a <= b; ++a) m[c*c*c + b*b*b + a*a*a]++; for(e = d; e < 301; ++e) for(f = e; f < 301; ++f){ ll tar = x - d*d*d - e*e*e - f*f*f; if(tar < 0) break; if(m.count(tar)) ans += m[tar]; } } cout << ans << endl; }