func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:268435456 )   using namespace std;   template <typename T>   inline T abs(T a) {     return ((a < 0) ? -a : a);   }   template <typename T>   inline T sqr(T a) {     return a * a;   }   template <class T>   T gcd(T a, T b) {     return a ? gcd(b % a, a) : b;   }   template <class T>   T lcm(T a, T b) {     return a / gcd(a, b) * b;   }   template <class T>   T sign(T a) {     return a > 0 ? 1 : (a < 0 ? -1 : 0);   }   const int dx[] = {-1, 0, 1, 0};   const int dy[] = {0, 1, 0, -1};   const int dxK[] = {-1, -1, 0, 1, 1, 1, 0, -1};   const int dyK[] = {0, 1, 1, 1, 0, -1, -1, -1};   const int dxKn[] = {-2, -1, 1, 2, 2, 1, -1, -2};   const int dyKn[] = {1, 2, 2, 1, -1, -2, -2, -1};   const int N = int(1e6) + 9;   const int M = int(2e2) + 9;   const int LOGN = 22;   const int SQN = 350;   const int MOD = int(1e9) + 7;   const int INF = 1e9 + 100;   const long long INF64 = 2e18;   const long double PI = 3.1415926535897932384626433832795;   const long double EPS = 1e-9;   long long d, v, n;   pair<long long, long long> p[N];   void solve() {     scanf( %I64d %I64d %I64d , &d, &v, &n);     for (int i = 0; i < (int)(n); ++i)       scanf( %I64d %I64d , &p[i].first, &p[i].second);     p[n++] = make_pair(0, 0);     p[n++] = make_pair(d, 0);     sort(p, p + n);     p[n] = make_pair(d, 0);     multiset<pair<long long, long long> > s;     long long res = 0;     long long remd = v;     for (int i = 0; i < (int)(n); ++i) {       long long dist = p[i + 1].first - p[i].first;       if (dist > v) {         cout << -1;         return;       }       long long cost = p[i].second;       while (!s.empty() && s.rbegin()->first > cost) {         pair<long long, long long> cur = *s.rbegin();         s.erase(--s.end());         res -= cur.first * 1LL * cur.second;         remd += cur.second;       }       if (remd) {         res += cost * remd;         s.insert(make_pair(cost, remd));         remd = 0;       }       while (dist > 0) {         pair<long long, long long> cur = *s.begin();         s.erase(s.begin());         long long curdist = min(dist, cur.second);         dist -= curdist;         cur.second -= curdist;         remd += curdist;         if (cur.second > 0) s.insert(cur);       }     }     cout << res;   }   int main() {     srand(time(NULL));     srand(time(NULL));     cout << setprecision(10) << fixed;     cerr << setprecision(10) << fixed;     solve();     return 0;   }   