#include #include #include #include #include using namespace std; int main() { int n, d; cin >> n >> d; vector> ba; { map ab; ab[0] = d + 1; for (int i = 0; i < n; ++i) { int a, b; cin >> a >> b; ab[b] += a; } for (auto [b, a] : ab) ba.push_back({b, a}); reverse(ba.begin(), ba.end()); } long long sum = 0; n = ba.size(); int id = n; for (int i = 0; i < n; ++i) { sum += ba[i].second; if (sum >= d) { id = i; break; } } id = max(id - 1, 0); long long ans = 0; int tob = ba[id].first; for (int i = 0; i < id; ++i) { auto [b, a] = ba[i]; long long c = (b - tob) / d; ans += c * ba[i].second; ba[i].first -= c * d; } map mp; for (int i = 0; i < n; ++i) { auto [b, a] = ba[i]; mp[b] += a; } long long now = ans; ans = ans + max(mp.rbegin()->first, 0); int cnt = 0; while (mp.rbegin()->first >= 0) { auto itr = mp.end(); --itr; int b = itr->first; int a = itr->second; mp.erase(mp.find(b)); b -= d; mp[b] += a; now += a; ans = min(ans, now + max(mp.rbegin()->first, 0)); ++cnt; if (cnt >= 5 * n) break; } cout << ans << endl; }