#include using namespace std; #define FOR(i, a, b) for(int i = (a); i < (b); i++) #define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--) #define SZ(a) int(a.size()) #define ALL(a) a.begin(), a.end() #define PB push_back #define MP make_pair #define F first #define S second typedef long long LL; typedef vector VI; typedef pair PII; typedef long double db; const int MAGIC = 100; const int KROK = 4047; const int INF = 7 * KROK; int n, k; pair solve(vector h, int a) { LL curU = 0; FOR(i, 0, n) curU += (h[i] + a - 1) / a; LL curD = (k - a); return {curU, curD}; } bool more(pair a, pair b) { return a.F * (__int128)b.S > b.F * (__int128)a.S; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k; vector h(n); FOR(i, 0, n) cin >> h[i]; PII res = {-1, -1}; pair ans = {-1, -1}; for(int st = max(1, k / 2 - INF); st < min(k, k / 2 + INF); st += KROK) { LL l = st, r = min((LL)k, (LL)st + KROK); while(r - l > 10) { int m1 = (2 * l + r) / 3; int m2 = (l + 2 * r) / 3; if(more(solve(h, m1), solve(h, m2))) l = m1; else r = m2; } FOR(a, max(1LL, l - MAGIC), min(r + MAGIC, (LL)k)) { if(res.F == -1 || more(ans, solve(h, a))) { ans = solve(h, a); res = {a, k - a}; } } } cout << res.F << " " << res.S << "\n"; cerr << 1.0 * clock() / CLOCKS_PER_SEC << "\n"; return 0; }