#include #include using namespace std ; using ll = long long ; ll n, c ; vector> dt ; int cando(ll v) { ll researchleft = (v - 1) * c ; ll flex = 0 ; ll lastleft = c ; for (auto i: dt) { ll cnt = min(v, 1 + (i.second - 1) / i.first) ; researchleft -= cnt-1 ; if (cnt == v) lastleft -= 1 + max(0LL, i.second - cnt * i.first) ; else flex++ ; } return lastleft >= 0 && researchleft + lastleft >= flex ; } int main() { cin >> n >> c ; dt.resize(n) ; for (ll i=0; i> dt[i].second >> dt[i].first ; ll b = 2 ; ll hi = 1 ; for (; !cando(hi); b <<= 1) hi = b ; for (; b; b >>= 1) if (hi > b && cando(hi - b)) hi -= b ; cout << (hi-1) << endl ; }