#include<stdio.h>

int bs (int [], int, int);

int min(int b,int c)
{
	int M;
	if(b!=0 && c!=0)
	{
	   M=b;
	   if(M>c) M=c;
	}
	else
	{
		if(b==0)
		{
			return c;
		}
		else
		{
			return b;
		}
	}
	return M;
}

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

int bs (int D[], int n, int c) 
 {
    int j,k,l;
    j=0;
    k=n-1;
    while(1)
    {
        if(j<=k)
        {
            l=(j+k)/2;
            if(D[l] > c)
            {
                k=l-1;
            }
            else if(D[l+1] < c)
            {
                j=l+1;
            }
            else
            {
                return l;
            }
        }
        else
        {
            return k;
        }
    }
}