#include <iostream>

using namespace std;

const int NMAX=1000001;

int main()
{
	static int p[200];
	for(int i=0;i<200;i++)
		p[i]=(i+1)*(i+2)*(i+3)/6;
	
	static int a[NMAX],b[NMAX];
	for(int i=0;i<NMAX;i++)
		a[i]=b[i]=i;
	for(int i=0;i<200;i++){
		for(int j=p[i];j<NMAX;j++)
			a[j]=min(a[j],a[j-p[i]]+1);
		if(!(p[i]&1)) continue;
		for(int j=p[i];j<NMAX;j++)
			b[j]=min(b[j],b[j-p[i]]+1);
	}
	
	for(int n;cin>>n,n;)
		cout<<a[n]<<" "<<b[n]<<endl;
	
	return 0;
}