#include <bits/stdc++.h>
using namespace std;
long long n, q, v[5000010], ct, va, s[5000010];
signed a[5000010], p;
vector<long long> g[5000010];
void bd(signed o, signed l, signed r) {
  if (l == r) {
    s[o] = a[l];
    g[o] = {p - a[l], (1ll << 60)};
    return;
  }
  signed md = (l + r) / 2;
  bd(o * 2, l, md);
  bd(o * 2 + 1, md + 1, r);
  s[o] = s[o * 2] + s[o * 2 + 1];
  long long v = s[o * 2];
  for (signed i = 0, j = 0;
       i + 1 < g[o * 2].size() || j + 1 < g[o * 2 + 1].size();) {
    if (g[o * 2][i] + v < g[o * 2 + 1][j]) {
      if (g[o].size() && g[o].back() + p > g[o * 2][i])
        g[o].push_back(g[o].back() + p);
      else
        g[o].push_back(g[o * 2][i]);
      v -= p;
      i++;
    } else {
      g[o].push_back(g[o * 2 + 1][j] - v);
      j++;
    }
  }
  g[o].push_back(1ll << 60);
}
void gt(signed o, signed l, signed r, signed x, signed y) {
  if (x <= l && r <= y) {
    va = va + s[o] -
         1ll * (upper_bound(g[o].begin(), g[o].end(), va) - g[o].begin()) * p;
    return;
  }
  signed md = (l + r) / 2;
  if (x <= md) gt(o * 2, l, md, x, y);
  if (md < y) gt(o * 2 + 1, md + 1, r, x, y);
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> q >> p;
  for (long long i = 0; i < n; i++) cin >> a[i];
  bd(1, 0, n - 1);
  while (q--) {
    long long x, y;
    cin >> x >> y;
    x--;
    y--;
    va = 0;
    gt(1, 0, n - 1, x, y);
    cout << va << '\n';
  }
}
