#include <bits/stdc++.h>
using namespace std;
int gi() {
  int res = 0, w = 1;
  char ch = getchar();
  while (ch != '-' && !isdigit(ch)) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
  return res * w;
}
using LL = long long;
void chkmin(LL &x, LL y) {
  if (x > y) x = y;
}
const LL INF = 1e16;
const int MAX_N = 1e6 + 5;
int N, M, P;
LL sum[MAX_N << 2];
vector<LL> pot[MAX_N << 2];
void pushup(int o) {
  sum[o] = sum[(o << 1)] + sum[(o << 1 | 1)];
  pot[o].resize(pot[(o << 1)].size() + pot[(o << 1 | 1)].size() - 1, INF);
  for (int i = 0, j = 0; i < (int)pot[(o << 1)].size(); i++) {
    LL xl = pot[(o << 1)][i],
       xr = (i + 1 == (int)pot[(o << 1)].size() ? INF
                                                : pot[(o << 1)][i + 1] - 1);
    LL yl = xl + sum[(o << 1)] - 1ll * i * P,
       yr = xr + sum[(o << 1)] - 1ll * i * P;
    while (j && pot[(o << 1 | 1)][j] > yl) --j;
    while (j < (int)pot[(o << 1 | 1)].size() &&
           (!j || pot[(o << 1 | 1)][j] <= yl))
      ++j;
    --j;
    while (j < (int)pot[(o << 1 | 1)].size() && pot[(o << 1 | 1)][j] <= yr)
      chkmin(pot[o][i + j],
             max(xl, pot[(o << 1 | 1)][j] - sum[(o << 1)] + 1ll * i * P)),
          ++j;
  }
  pot[o][0] = -INF;
}
void build(int o, int l, int r) {
  if (l == r) return (void)(sum[o] = gi(), pot[o] = {-INF, P - sum[o]});
  int mid = (l + r) >> 1;
  build((o << 1), l, mid), build((o << 1 | 1), mid + 1, r);
  pushup(o);
}
LL query(int o, int l, int r, int ql, int qr, LL v) {
  if (ql <= l && r <= qr)
    return v + sum[o] -
           1ll *
               (upper_bound(pot[o].begin(), pot[o].end(), v) - pot[o].begin() -
                1) *
               P;
  int mid = (l + r) >> 1;
  if (ql <= mid) v = query((o << 1), l, mid, ql, qr, v);
  if (qr > mid) v = query((o << 1 | 1), mid + 1, r, ql, qr, v);
  return v;
}
int main() {
  N = gi(), M = gi(), P = gi();
  build(1, 1, N);
  while (M--) {
    int l = gi(), r = gi();
    printf("%lld\n", query(1, 1, N, l, r, 0));
  }
  return 0;
}
