#include<stdio.h>

int min(int x,int y)
{
	if(x>=y) return y;
	return x;
}

int main(void)
{
	int i,j,k,l,n,a[1000],b[1000],dp[1000][1000001];
	
	while(1)
	{
		scanf("%d",&n);
		if(n==0) break;
		a[0]=0;
		i=1;
		while(1)
		{
			a[i]=(i*(i+1)*(i+2))/6;
			if(a[i]>n) break;
			i++;
		}
		k=i;
		for(i=0;i<=n;i++)
		{
			dp[0][i]=0;
			dp[1][i]=i;
		}
		for(i=2;i<=k;i++)
		{
			for(j=0;j<=n;j++)
			{
				if(a[i]<=j)
				{
					dp[i][j]=min(dp[i][j-a[i]]+1,dp[i-1][j]);
				}
				else
				{
					dp[i][j]=dp[i-1][j];
				}
			}
		}
		printf("%d ",dp[k][n]);
		b[0]=0;
		i=0;
		j=1;
		while(1)
		{
			if(a[j]%2==1)
			{
				i++;
				b[i]=a[j];
				
			}
			if(b[i]>n) break;
			j++;
		}
		l=i-1;
		for(i=0;i<=n;i++)
		{
			dp[0][i]=0;
			dp[1][i]=i;
		}
		for(i=2;i<=l;i++)
		{
			for(j=0;j<=n;j++)
			{
				if(b[i]<=j)
				{
					dp[i][j]=min(dp[i][j-b[i]]+1,dp[i-1][j]);
				}
				else
				{
					dp[i][j]=dp[i-1][j];
				}
			}
		}
		printf("%d\n",dp[l][n]);
	}
	return 0;
}