#include <bits/stdc++.h>
using namespace std;
vector<long long> arr;
pair<int, long long> doit(long long n) {
  if (n <= 7) return make_pair(n, n);
  vector<long long>::iterator ite = upper_bound(arr.begin(), arr.end(), n);
  int ind = (ite - arr.begin());
  ind--;
  pair<int, long long> te1 = doit(n - arr[ind]);
  pair<int, long long> te2 = doit(arr[ind] - 1 - arr[ind - 1]);
  if (te1.first > te2.first)
    return make_pair(te1.first + 1, te1.second + arr[ind]);
  if (te1.first < te2.first)
    return make_pair(te2.first + 1, te2.second + arr[ind - 1]);
  if (te1.second + arr[ind] > te2.second + arr[ind - 1])
    return make_pair(te1.first + 1, te1.second + arr[ind]);
  return make_pair(te2.first + 1, te2.second + arr[ind - 1]);
}
int main() {
  for (long long i = 0; i <= 100001; i++) {
    arr.push_back(i * i * i);
  }
  long long m;
  cin >> m;
  pair<int, long long> temp = doit(m);
  cout << temp.first << " " << temp.second;
  return 0;
}
