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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;



public class Abood2B {


	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);

		long n = sc.nextLong();
		
		int c = 0;
		long acc = 0;
		long cur = 1;
		ArrayList<Long> v = new ArrayList<>();
		while(true) {
			while (acc + q(cur) >= q(cur + 1) && cur <= 1e5)
				cur++;
			if(acc + q(cur) <= n && cur <= 1e5) {
				acc += q(cur);
				v.add(cur);
				c++;
			} else
				break;
		}
		
		long r = acc;
		
		
		for (int i = v.size() - 1; i >= 0; i--) {
			r -= q(v.get(i));
			
			long lo = 0;
			long hi = (long) 1e5; 
			long mid = -1;
			long ans = 0;
			while(lo <= hi) {
				mid = (lo + hi) / 2;
				long cc = r + q(v.get(i) + mid);
				boolean can = true;
				if(acc - q(v.get(i)) + q(v.get(i) + mid) > n)
					can = false;
				
				for (int j = i + 1; j < v.size() && can; j++) {
					if(cc + q(v.get(j)) >= q(v.get(j) + 1)) 
						can = false;
					cc += q(v.get(j));
				}
				
				if(can){
					ans = mid;
					lo = mid + 1;
				}else
					hi = mid - 1;
			}
						
			acc = acc - q(v.get(i)) + q(v.get(i) + ans);
			v.set(i, v.get(i) + ans);
		}
		
		out.println(c + " " + acc);
		
		out.flush();
		out.close();
	}
	
	static long q(long x) {
		return x * x * x;
	}




	static class Scanner 



	{
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}

		public String next() throws IOException 
		{
			while (st == null || !st.hasMoreTokens()) 
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int nextInt() throws IOException {return Integer.parseInt(next());}

		public long nextLong() throws IOException {return Long.parseLong(next());}

		public String nextLine() throws IOException {return br.readLine();}


		public double nextDouble() throws IOException
		{
			String x = next();
			StringBuilder sb = new StringBuilder("0");
			double res = 0, f = 1;
			boolean dec = false, neg = false;
			int start = 0;
			if(x.charAt(0) == '-')
			{
				neg = true;
				start++;
			}
			for(int i = start; i < x.length(); i++)
				if(x.charAt(i) == '.')
				{
					res = Long.parseLong(sb.toString());
					sb = new StringBuilder("0");
					dec = true;
				}
				else
				{
					sb.append(x.charAt(i));
					if(dec)
						f *= 10;
				}
			res += Long.parseLong(sb.toString()) / f;
			return res * (neg?-1:1);
		}

		public boolean ready() throws IOException {return br.ready();}



	}

}