#include <stdio.h>
#define MAX 1000000

/* 正四面体数列 */
int tetra[200]; /* 10^6以下の正四面体数は180個 */
int tetra_l;
int tetra_odd[100];
int tetra_odd_l;

int divide[MAX+1]; /* ある正整数を和で表すために必要な正四面体数の個数 */
int divide_odd[MAX+1]; /* ある正整数を和で表すために必要な「奇数」正四面体数の個数 */
#define UNKNOWN 0

int main(void) {
	int n, i;

	// 正四面体数列を生成する
	for (i = 1, tetra_l = 0, tetra_odd_l = 0; (n = i * (i + 1) * (i + 2) / 6) <= MAX; i++) {
		tetra[tetra_l++] = n;
		if (n % 2 != 0) tetra_odd[tetra_odd_l++] = n; /* 奇数のみの正四面体数列 */
	}

	/* 初期化する */
	for (n = 0; n <= MAX; n++) {
		divide[n] = UNKNOWN;
		divide_odd[n] = UNKNOWN;
	}

	/* 入力されうる全ての正整数について、必要な正四面体数の個数を求める */
	/* 正四面体数 */
	for (i = 0; i < tetra_l; i++) divide[tetra[i]] = 1;
	for (i = 0; i < tetra_odd_l; i++) divide_odd[tetra_odd[i]] = 1;
	/* 正四面体数でない正整数 */
	for (n = 1; n <= MAX; n++) {
		/* (個数が既知の正整数 + 正四面体数) に必要な個数は、その既知の個数に1を加えた数である */
		for (i = 0; i < tetra_l && n + tetra[i] <= MAX; i++) {
			if (divide[n + tetra[i]] == UNKNOWN || divide[n] + 1 < divide[n + tetra[i]]) {
				divide[n + tetra[i]] = divide[n] + 1;
			}
		}
		/* 奇数のみの場合 */
		for (i = 0; i < tetra_odd_l && n + tetra_odd[i] <= MAX; i++) {
			if (divide_odd[n + tetra_odd[i]] == UNKNOWN || divide_odd[n] + 1 < divide_odd[n + tetra_odd[i]]) {
				divide_odd[n + tetra_odd[i]] = divide_odd[n] + 1;
			}
		}
	}

	/* 与えられる正整数毎の処理 */
	while (scanf("%d", &n) == 1 && n > 0 && n <= MAX) printf("%d %d\n", divide[n], divide_odd[n]);

	return 0;
}