#include<stdio.h>
#include<string.h>
#define min(a,b)a<b?a:b
#define N 1000010
int o[200],s[200],dp1[N],dp2[N],n,i,j,k,x;;

void f(int t[200],int dp[N])
{
	int i,j;
	dp[0]=0;
	for(i=0;t[i];i++)
		for(j=0;j<=N;j++)
			if(j>=t[i])
				dp[j]=min(dp[j],dp[j-t[i]]+1);
}

int main()
{
	for(i=1,j=k=0;i*(i+1)*(i+2)/6<=N;i++)
	{
		x=i*(i+1)*(i+2)/6;
		if(x%2)
			o[j++]=x;
		s[k++]=x;
	}
	memset(dp1,0x7f,sizeof(dp1));
	memset(dp2,0x7f,sizeof(dp2));
	f(s,dp1);
	f(o,dp2);
	for(;scanf("%d",&n),n;)
		printf("%d %d\n",dp1[n],dp2[n]);
	return 0;
}