func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mxN = 1e6;   int n, m, p, a[mxN];   long long s1[1 << 21];   vector<long long> s2[1 << 21];   void bld(int i = 1, int l = 0, int r = n - 1) {     if (l == r) {       s1[i] = a[l];       s2[i] = {p - a[l], 1ll << 60};       return;     }     int m = (l + r) / 2;     bld(2 * i, l, m);     bld(2 * i + 1, m + 1, r);     s1[i] = s1[2 * i] + s1[2 * i + 1];     long long cs = s1[2 * i];     for (int i1 = 0, i2 = 0;          i1 < s2[2 * i].size() - 1 || i2 < s2[2 * i + 1].size() - 1;) {       if (s2[2 * i][i1] + cs < s2[2 * i + 1][i2]) {         if (s2[i].size() && s2[i].back() > s2[2 * i][i1] - p)           s2[i].push_back(s2[i].back() + p);         else           s2[i].push_back(s2[2 * i][i1]);         cs -= p;         ++i1;       } else         s2[i].push_back(s2[2 * i + 1][i2++] - cs);     }     s2[i].push_back(1ll << 60);   }   long long qry(int l1, int r1, long long x, int i = 1, int l2 = 0,                 int r2 = n - 1) {     if (l1 <= l2 && r2 <= r1)       return x + s1[i] -              (long long)(upper_bound(s2[i].begin(), s2[i].end(), x) -                          s2[i].begin()) *                  p;     int m2 = (l2 + r2) / 2;     if (r1 <= m2) return qry(l1, r1, x, 2 * i, l2, m2);     if (m2 < l1) return qry(l1, r1, x, 2 * i + 1, m2 + 1, r2);     return qry(l1, r1, qry(l1, r1, x, 2 * i, l2, m2), 2 * i + 1, m2 + 1, r2);   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cin >> n >> m >> p;     for (int i = 0; i < n; ++i) cin >> a[i];     bld();     for (int l, r; m--;) {       cin >> l >> r, --l, --r;       cout << qry(l, r, 0) <<   n ;     }   }   