#include <bits/stdc++.h>
using namespace std;
int _find(long long int m) {
  long long int low = 1;
  long long int high = 100000;
  long long int ret;
  while (low <= high) {
    long long int mid = (low + high) >> 1LL;
    if (mid * mid * mid <= m) {
      ret = mid;
      low = mid + 1LL;
    } else
      high = mid - 1LL;
  }
  return ret;
}
pair<long long int, long long int> call(long long int m) {
  if (m <= 7) return make_pair(m, m);
  long long int a = _find(m);
  pair<long long int, long long int> ret1 = call(m - a * a * a);
  pair<long long int, long long int> ret2 =
      call(a * a * a - 1LL - (a - 1LL) * (a - 1LL) * (a - 1LL));
  if (ret1.first > ret2.first)
    return make_pair(ret1.first + 1LL, ret1.second + a * a * a);
  else if (ret2.first > ret1.first)
    return make_pair(ret2.first + 1,
                     ret2.second + (a - 1LL) * (a - 1LL) * (a - 1LL));
  else if (ret1.second + a * a * a >
           ret2.second + (a - 1LL) * (a - 1LL) * (a - 1LL))
    return make_pair(ret1.first + 1, ret1.second + a * a * a);
  else
    return make_pair(ret1.first + 1,
                     ret2.second + (a - 1LL) * (a - 1LL) * (a - 1LL));
}
int main() {
  long long int m;
  scanf("%lld", &m);
  pair<long long int, long long int> ans = call(m);
  printf("%lld %lld\n", ans.first, ans.second);
  return 0;
}
