#include <bits/stdc++.h>
using namespace std;
inline long long cube(long long i) { return (i * i * i); }
long long find(long long val, long long b = 1, long long e = 100000) {
  if (b == e) return b;
  if (e - b == 1) return (cube(e) <= val) ? e : b;
  long long m = (b + e) / 2;
  if (cube(m) <= val) {
    if (cube(m + 1) <= val)
      return find(val, m + 1, e);
    else
      return m;
  } else
    return find(val, b, m - 1);
}
int count(long long n) {
  if (n == 0) {
    return 0;
  }
  if (n == 1) {
    return 1;
  }
  long long x = find(n);
  int val = (cube(x) == n) ? 1 : 0;
  long long y = max(cube(x) - cube(x - 1) - 1, n - cube(x) - val);
  return 1 + count(y);
}
long long get(long long n) {
  if (n == 0) {
    return 0;
  }
  if (n == 1) {
    return 1;
  }
  long long x = find(n);
  int val = (cube(x) == n) ? 1 : 0;
  int a = count(cube(x) - cube(x - 1) - 1);
  int b = count(n - cube(x) - val);
  if (a <= b) {
    return cube(x) + get(n - cube(x) - val);
  } else
    return cube(x - 1) + get(cube(x) - cube(x - 1) - 1);
}
int main(int argc, char const *argv[]) {
  long long n;
  cin >> n;
  cout << count(n) << " " << get(n) << endl;
  return 0;
}
