func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 1e9 + 7;   int n, g, p, d, a, b, act, nxt;   long long res;   int Next[(1000000 + 6)];   pair<int, int> Stacje[(1000000 + 6)];   stack<int> S;   int main() {     scanf( %d %d %d , &d, &g, &n);     p = g;     for (int i = 1; i <= n; i++) {       scanf( %d %d , &a, &b);       Stacje[i] = make_pair(a, b);     }     Stacje[0] = make_pair(0, INF);     Stacje[n + 1] = make_pair(d, -INF);     sort(Stacje + 1, Stacje + n + 1);     for (int i = n + 1; i >= 0; i--) {       while (!S.empty() && Stacje[S.top()].second > Stacje[i].second) {         S.pop();       }       Next[i] = S.empty() ? -1 : S.top();       S.push(i);     }     while (act != n + 1) {       if (Stacje[Next[act]].first - Stacje[act].first <= g) {         int dis = Stacje[Next[act]].first - Stacje[act].first;         p -= dis;         if (p < 0) {           res += (-p) * (long long)Stacje[act].second;           p = 0;         }         act = Next[act];       } else {         int dis = Stacje[act + 1].first - Stacje[act].first;         if (dis > g) {           break;         }         res += (g - p) * (long long)Stacje[act].second;         p = g - dis;         act++;       }     }     printf( %lld n , act != n + 1 ? -1 : res);   }   