func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 300001;   int n, a, b, c, d, start, len;   vector<int> T;   long long dp[2][N + 2], seg[4 * N];   void build(int p, int s, int e) {     if (s == e) {       seg[p] = dp[1][s];       return;     }     build(2 * p, s, (s + e) / 2);     build(2 * p + 1, (s + e) / 2 + 1, e);     seg[p] = min(seg[2 * p], seg[2 * p + 1]);   }   long long get(int p, int s, int e, int a, int b) {     if (s >= a && e <= b) return seg[p];     if (s > b || e < a) return 1e15;     return min(get(2 * p, s, (s + e) / 2, a, b),                get(2 * p + 1, (s + e) / 2 + 1, e, a, b));   }   int main() {     scanf( %d%d%d%d%d%d%d , &n, &a, &b, &c, &d, &start, &len);     dp[0][0] = start;     dp[1][0] = start;     T.push_back(0);     for (int i = 1, t, q; i <= n; i++) {       scanf( %d%d , &t, &q);       dp[0][i] = dp[0][i - 1], dp[1][i] = dp[1][i - 1];       if (q)         dp[0][i] += a, dp[1][i] += c;       else         dp[0][i] -= b, dp[1][i] -= d;       T.push_back(t);     }     build(1, 0, n);     int j = n, c = 0;     auto it = lower_bound(T.begin(), T.end(), c + len);     if (it != T.end()) j = *it - 1;     if (get(1, 0, n, 0, j) >= 0) {       printf( %d n , c);       return 0;     }     for (int i = 0; i < T.size(); i++) {       if (dp[0][i] < 0) break;       c = T[i] + 1;       j = lower_bound(T.begin(), T.end(), c + len) - T.begin() - 1;       if (i == n || j < i + 1 ||           get(1, 0, n, i + 1, j) - dp[1][i] + dp[0][i] >= 0) {         printf( %d n , c);         return 0;       }     }     puts( -1 );     return 0;   }   