#define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; const ld epsylon = 1e-9; typedef unsigned int ui; //inline long double get_time(){ // return (long double)clock()/CLOCKS_PER_SEC; //}; //ld start_time,end_time; int n, p; int c[102], d[102]; vector > left1; int main() { freopen("summer.in","r",stdin); freopen("summer.out","w",stdout); //start_time = get_time(); //program scanf("%d %d", &n, &p); for (int i = 0; i < n; ++i) scanf("%d %d", &d[i], &c[i]); long long res = 0; int inleft1 = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < left1.size(); ++j) { if (c[i] > left1[j].first) { if (left1[j].second > d[i]) { left1[j].second -= d[i]; res += d[i] * left1[j].first; inleft1 -= d[i]; d[i] = 0; } else { res += left1[j].second * left1[j].first; d[i] -= left1[j].second; inleft1 -= left1[j].second; left1[j].second = 0; } } else { left1[j].first = c[i]; } } if (inleft1 < p) { left1.push_back(make_pair(c[i], p-inleft1)); inleft1 = p; } res += d[i] * c[i]; } cout << res << endl; //end program //end_time=get_time()-start_time; return 0; }