#include #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; using P = pair; int main() { int n, d; cin >> n >> d; vector a(n), b(n); rep(i, n) cin >> a[i] >> b[i]; vector is(n); rep(i, n) is[i] = i; ll sum = 0; rep(i, n) sum += a[i]; ll t = 0; if (sum >= d) { sort(is.begin(), is.end(), [&](int i, int j) { return b[i] < b[j]; }); ll suf = sum; for (int i = 0; i < n;) { int j = i; while (j < n and b[is[j]] == b[is[i]]) { suf -= a[is[j]]; ++j; } if (suf < d) { t = b[is[i]]; break; } i = j; } } ll now = t; rep(i, n) { if (b[i] > t) { now += ll(b[i]-t+d-1)/d*a[i]; } } ll ans = now; vector

events; rep(i, n) { ll x = t + (b[i]%d-t%d+d)%d; if (t < x and x <= b[i]) { events.emplace_back(x, a[i]); } } sort(events.begin(), events.end()); ll pos = t; for (int i = 0; i < events.size();) { ll x = events[i].first; ll w = 0; while (i < events.size() and events[i].first == x) { w += events[i].second; ++i; } now += x-pos-w; pos = x; ans = min(ans, now); } cout << ans << '\n'; return 0; }