#include using namespace std; typedef long long ll; typedef long double ld; struct frac { ll a, b; friend bool operator<(frac x, frac y) { return __int128_t(x.a) * y.b < __int128_t(y.a) * x.b; } }; int main() { cin.tie(nullptr); cout.tie(nullptr); iostream::sync_with_stdio(false); int n, k; cin >> n >> k; vector d(n); for (int & e : d) cin >> e; int mid = sqrt(k); int search = 50; int st = max(1, mid - search); int end = min(k - 1, mid + search); frac ans = {ll(1e18), 1}; int x_ans = -1; for (int x = st; x <= end; x++) { // check ll y = k - x; ll cans_up = 0; for (int h : d) { cans_up += ceill(ld(h) / x); } frac cans{cans_up, y}; if (cans < ans) { ans = cans; x_ans = x; } } cout << x_ans << " " << k - x_ans << '\n'; }