import std.stdio;
import std.algorithm;
import std.string;
import std.functional;
import std.array;
import std.conv;
import std.math;
import std.typecons;
import std.regex;
import std.range;
int a;
int[] p = [1,4,10,20,35];
int[] dp,odp;


void main(){
    for(int i=6;i<100;i++){
	p ~= i * (i+1) * (i+2) / 6;
    }
    dp = new int[1000001];
    odp = new int[1000001];
    fill(dp,-1);
    fill(odp,-1);
    dp[0] = 0;
    dp[1] = 1;
    odp[0] = 0;
    odp[1] = 1;
    for(int i=to!int(p.length)-1;i>=0;i--){
	for(int j=p[i];j<=1e6;j++){
	    if(dp[j-p[i]] > -1){
		if(dp[j] > -1)
		    dp[j] = min(dp[j],1 + dp[j-p[i]]);
		else dp[j] = 1 + dp[j-p[i]];
	    }
	    if(odp[j-p[i]] > -1){
		if(p[i] % 2 == 1){
		    if(odp[j] > -1)
			odp[j] = min(odp[j],1 + odp[j-p[i]]);
		    else odp[j] = 1 + odp[j-p[i]];
		}
	    }
	}
    }

    while(true){
	int n = readln().chomp().to!int;
	if(n == 0) break;
	writeln(dp[n] , " " , odp[n]);
    }
}