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

#include <bits/stdc++.h>
using namespace std;
template <class T>
void print_2darray(const char* s, T arr, int n, int m) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (int i = 0, _stop = n; i < _stop; i++) {
    cout << "{";
    for (int j = 0, _stop = m; j < _stop; j++) {
      cout << arr[i][j] << (j == m - 1 ? "" : ",");
    }
    cout << "}" << '\n';
  }
  cout << "]" << '\n';
}
template <class T>
void print_2darray(const char* s, T arr, int n) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (int i = 0, _stop = n; i < _stop; i++) {
    cout << i << " - {";
    for (int j = 0, _stop = (int)arr[i].size(); j < _stop; j++) {
      cout << arr[i][j] << (j == (int)arr[i].size() - 1 ? "" : ",");
    }
    cout << "}" << '\n';
  }
  cout << "]" << '\n';
}
template <class T>
void print_1darray(const char* s, T arr, int n) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (int i = 0, _stop = n; i < _stop; i++) {
    cout << arr[i] << (i == n - 1 ? "" : ",");
  }
  cout << '\n' << "]" << '\n';
}
template <class T>
void print_1darray(const char* s, T arr) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (int i = 0, _stop = arr.size(); i < _stop; i++) {
    cout << arr[i] << (i == (int)arr.size() - 1 ? "" : ",");
  }
  cout << '\n' << "]" << '\n';
}
template <class T>
void print_set(const char* s, set<T>& myset) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (__typeof(myset.begin()) it = myset.begin(); it != myset.end(); it++) {
    cout << *it << " ";
  }
  cout << '\n' << "]" << '\n';
}
template <class T>
void print_uset(const char* s, unordered_set<T>& myset) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (__typeof(myset.begin()) it = myset.begin(); it != myset.end(); it++) {
    cout << *it << " ";
  }
  cout << '\n' << "]" << '\n';
}
template <class T1, class T2>
void print_map(const char* s, map<T1, T2>& mymap) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (__typeof(mymap.begin()) it = mymap.begin(); it != mymap.end(); it++) {
    cout << "{" << it->f << "->" << it->s << "}" << '\n';
  }
  cout << "]" << '\n';
}
template <class T1, class T2>
void print_umap(const char* s, unordered_map<T1, T2>& mymap) {
  cout << "> " << s << '\n';
  cout << "[" << '\n';
  for (__typeof(mymap.begin()) it = mymap.begin(); it != mymap.end(); it++) {
    cout << "{" << it->f << "->" << it->s << "}" << '\n';
  }
  cout << "]" << '\n';
}
long long int m;
vector<long long int> cubes;
pair<long long int, long long int> ans;
void gen(long long int m, long long int steps, long long int sum) {
  if (m <= 0) {
    if (ans.first < steps || (ans.first == steps && ans.second < sum)) {
      ans.first = steps;
      ans.second = sum;
    }
    return;
  }
  auto it = upper_bound(cubes.begin(), cubes.end(), m);
  it--;
  gen(m - *it, steps + 1, sum + *it);
  if (*it > 1) {
    long long int n1 = *it;
    it--;
    long long int n2 = *it;
    gen(n1 - 1 - n2, steps + 1, sum + n2);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> m;
  for (int i = 0, _stop = 100001; i <= _stop; i++) {
    cubes.push_back((long long int)i * (long long int)i * (long long int)i);
  }
  gen(m, 0, 0);
  cout << ans.first << " " << ans.second;
  return 0;
}
