1000000000000000
 994
 200385
 3842529393411
 8
 409477218238717
 2
 419477218238718
 909383000
 7
 999088000000000
 265
 415000000238718
 780869426483087
 9
 850085504652042
 567000123
 980123123123123
 409477218238719
 385925923480002
 999998169714888
 936302451686999
 114
 999999993700000
 108000000057
 409477218238716
 112
 1
 409477218238718
 999971000299999
 409477318238718
 735412349812385
 113
 999999999999999
 123830583943
 899990298504716
 936302451687000
 995
 990000000000000
 936302451687001
 999986542686123
 850085504652041

18 999999993541753
 12 941
 14 200355
 17 3842529383076
 7 7
 17 409477218238717
 2 2
 18 419466459294818
 16 909381874
 7 7
 18 999087986204952
 11 212
 18 414993991790735
 18 780869407920631
 7 7
 18 850085504652042
 16 566998782
 18 980123123116482
 18 409477218238718
 17 385925923479720
 18 999998150030846
 18 936302448662019
 11 114
 18 999999993541753
 17 107986074062
 17 409477218238710
 10 106
 1 1
 18 409477218238718
 18 999969994441746
 18 409477218238718
 18 735409591249436
 10 113
 18 999999993541753
 17 123830561521
 18 899973747835553
 18 936302448662019
 12 995
 18 989983621692990
 18 936302448662019
 18 999969994441746
 18 850085504650655

import java.io.*;
import java.util.*;



public class main
{

	public static void main (String[] args) 
	{
		Scanner in = new Scanner(System.in);
		long l = in.nextLong();
		
		int block = 0;
		long lim = 0;
		long m = 1;

		ArrayList<Long> al = new ArrayList<>();

		while(true) {
			while (lim + cube(m) >= cube(m + 1) && m <= 1e15)
				m++;
			if(lim + cube(m) <= l && m <= 1e15) {
				lim += cube(m);
				al.add(m);
				block++;
			} else
				break;
		}
		
		long result = lim;
		
		
		for (int x = al.size() - 1; x >= 0; x--) {
			result -= cube(al.get(x));
			
			long lo = 0;
			long hi = (long) 1e15; 
			long mid = -1;
			long answer = 0;
			while(lo <= hi) {
				mid = (lo + hi) / 2;
				long cc = result + cube(al.get(x) + mid);
				boolean can = true;
				if(lim - cube(al.get(x)) + cube(al.get(x) + mid) > l)
					can = false;
				
				for (int y = x + 1; y < al.size() && can; y++) {
					if(cc + cube(al.get(y)) >= cube(al.get(y) + 1)) 
						can = false;
					cc += cube(al.get(y));
				}
				
				if(can){
					answer = mid;
					lo = mid + 1;
				}else
					hi = mid - 1;
			}
						
			lim = lim - cube(al.get(x)) + cube(al.get(x) + answer);
			al.set(x, al.get(x) + answer);
		}
		
		System.out.println(block + " " + lim);

	}
	
	static long cube (long x) 
	{
		return x * x * x;
	}
}
	
