#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 = 1'547; 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]; VI as; FOR(it, 0, 3) FOR(i, max(1, (it * k) / 2 - MAGIC), min((it * k) / 2 + MAGIC, k)) as.PB(i); sort(ALL(as)); as.resize(unique(ALL(as)) - as.begin()); LL l = 1, r = k - 1; const int sz = 10; while(r - l > 10) { int m1 = ((sz - 1) * l + r) / sz; int m2 = (l + (sz - 1) * r) / sz; if(more(solve(h, m1), solve(h, m2))) l = m1; else r = m2; } PII res = {-1, -1}; pair ans = {-1, -1}; 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"; return 0; }