#include <bits/stdc++.h>
using namespace std;
struct node{int d,m;};
bool cmp(node a,node b){
return a.d<b.d;
}
int main() {
int n,m,ans=0;
cin >> n >> m;
vector<node> vec;
set<int> s;
for (int i=0;i<n;i++){
node tmp;
cin >> tmp.d >> tmp.m;
vec.push_back(tmp);
s.insert(tmp.d);
}
sort(vec.begin(),vec.end(),cmp);
for (auto i=s.begin();i!=s.end();i++){
int rest = m;
if (i!=s.begin()&&s.count((*i)-1)==1){
int j = (*i)-1;
for (int p=0;p<vec.size();p++){
if (vec[p].d==j){
if (rest>=vec[p].m){
rest-=vec[p].m;
ans+=vec[p].m;
vec[p].m=0;
} else {
ans+=rest;
rest=0;
vec[p].m-=rest;
break;
}
}
}
}
int j = *i;
for (int p=0;p<vec.size();p++){
if (vec[p].d==j){
if (rest>=vec[p].m){
rest-=vec[p].m;
ans+=vec[p].m;
vec[p].m=0;
} else {
ans+=rest;
rest=0;
vec[p].m-=rest;
break;
}
}
}
if (s.count(j+1)==0){
int resto = m;
for (int p=0;p<vec.size();p++){
if (vec[p].d==j){
if (resto>=vec[p].m){
resto-=vec[p].m;
ans+=vec[p].m;
vec[p].m=0;
} else {
ans+=resto;
resto=0;
vec[p].m-=resto;
break;
}
}
}
}
}
cout << ans;
}
4WA+6TLE
(好像和前一个帖的结果一样)