func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     long long p;     int d;   } store[200005];   bool cmp(node& a, node& b) { return a.d < b.d; }   bool check(int e, int full, int n) {     if (store[0].d > full) return 1;     for (int i = 0; i < (n - 1); ++i)       if (store[i + 1].d - store[i].d > full) return 1;     if (e - store[n - 1].d > full) return 1;     return 0;   }   int main(void) {     int e, full, n;     scanf( %d %d %d , &e, &full, &n);     for (int i = 0; i < (n); ++i) scanf( %d %lld , &store[i].d, &store[i].p);     sort(store, store + n, cmp);     if (check(e, full, n)) {       puts( -1 );       return 0;     }     long long ret = 0;     int cur = full - store[0].d;     for (int i = 0; i < (n); ++i) {       int d = store[i + 1].d - store[i].d;       int s = i + 1, minn = 1e7, indexx;       bool flag = 0;       while (d <= full && s < n) {         if (store[s].p <= store[i].p) {           if (d <= cur) {             cur -= d;           } else {             ret += (d - cur) * store[i].p;             cur = 0;           }           i = s - 1;           flag = 1;           break;         }         if (store[s].p <= minn) {           minn = store[i].p;           indexx = s;         }         s++;         d = store[s].d - store[i].d;       }       if (!flag) {         if (store[i].d + full >= e) {           ret += store[i].p * max(0, e - store[i].d - cur);           break;         }         ret += (full - cur) * store[i].p;         cur = full - (store[indexx].d - store[i].d);         i = indexx - 1;       }     }     printf( %lld , ret);     return 0;   }   