#include <bits/stdc++.h>
using namespace std;
const int N = 1001000;
long long mod, sum[N * 4], q3;
vector<long long> s[N * 4];
int a[N], q1, q2, n, m;
void bt(int o, int l, int r) {
  if (l == r) {
    sum[o] = a[l];
    s[o].push_back(mod - a[l]);
    return;
  }
  int mid = (l + r) / 2;
  bt(o * 2, l, mid);
  bt(o * 2 + 1, mid + 1, r);
  sum[o] = sum[o * 2] + sum[o * 2 + 1];
  long long tmp = sum[o * 2];
  int L = s[o * 2].size(), R = s[o * 2 + 1].size();
  for (int i = 0, j = 0; i < L || j < R;)
    if (j == R || (i < L && s[o * 2][i] + tmp < s[o * 2 + 1][j])) {
      if (!s[o].empty() && s[o].back() > s[2 * o][i] - mod)
        s[o].push_back(s[o].back() + mod);
      else
        s[o].push_back(s[2 * o][i]);
      tmp -= mod;
      ++i;
    } else
      s[o].push_back(s[o * 2 + 1][j++] - tmp);
}
void qry(int o, int l, int r) {
  if (q1 <= l && r <= q2) {
    q3 += sum[o] -
          (upper_bound(s[o].begin(), s[o].end(), q3) - s[o].begin()) * mod;
    return;
  }
  int mid = (l + r) / 2;
  if (q1 <= mid) qry(o * 2, l, mid);
  if (q2 > mid) qry(o * 2 + 1, mid + 1, r);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> mod;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  bt(1, 1, n);
  for (; m-- > 0;) {
    cin >> q1 >> q2;
    q3 = 0;
    qry(1, 1, n);
    cout << q3 << '\n';
  }
  return 0;
}
