#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; template ostream &operator<<(ostream &os, const vector &v) { int n = v.size(); rep(i, 0, n) { os << v[i] << " \n"[i == n - 1]; } return os; } void solve() { int n, m; cin >> n >> m; vector a(n), b(n), d(n); rep(i, 0, n) { cin >> a[i] >> b[i]; d[i] = (m - a[i]) / b[i]; } // cout << d; sort(d.begin(), d.end()); auto check = [&](ll mid) { vector e(n); int cur = -1; rep(i, 0, n) { if (i % mid == 0) cur++; e[i] = cur; } rep(i, 0, n) if (e[i] > d[i]) return 0; return 1; }; auto binary = [&]() { ll ac = n + 1, wa = -1; while (llabs(ac - wa) > 1) { ll mid = ac + (wa - ac) / 2; if (check(mid)) { ac = mid; } else { wa = mid; } } return ac; }; cout << binary() << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; while (t--) solve(); }