#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#define endl '\n'
//#pragma GCC optimize("Ofast")
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair < int, int >;
using pll = pair < ll, ll >;
const ll INF = 2e18;
const ll DIM = 500007;
const ld PI = 3.1415926535;
const int mod = 998244353;
struct jump {
int toX;
ll val;
};
vector < vector < vector < jump > > > j;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef IloveCP
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ll n, q, k;
cin >> n >> q >> k;
vector < ll > a(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i];
j.resize(n + 1);
for(int i = n; i >= 1; i--) {
if(i % 2 == 0) continue;
j[i].resize(k, vector < jump >(19));
for(int x = 0; x < k; x++) {
ll tmp = a[i];
ll bal = x;
if(bal + tmp >= k) {
j[i][x][0].val++;
tmp -= (k - bal);
bal = 0;
}
j[i][x][0].val += tmp / k;
tmp %= k;
if(i + 2 <= n) {
bal = max(bal + tmp - a[i + 1], (ll)0);
j[i][x][0].toX = bal;
}
for(int p = 1; p < 19; p++) {
if(i + (1 << p) <= n) {
j[i][x][p].val = j[i][x][p - 1].val + j[i + (1 << p)][j[i][x][p - 1].toX][p - 1].val;
j[i][x][p].toX = j[i + (1 << p)][j[i][x][p - 1].toX][p - 1].toX;
}
else {
j[i][x][p] = j[i][x][p - 1];
}
}
//cout << j[0][i][x].val << " " << j[0][i][x].toX << endl;
//cout << j[1][i][x].val << " " << j[1][i][x].toX << endl;
}
}
for(int i = 0; i < q; i++) {
int l, r;
cin >> l >> r;
if(l % 2 == 0) l++;
if(r % 2 == 0) r--;
if(l > r) {
cout << 0 << endl;
continue;
}
int curr = l;
ll bal = 0;
ll res = 0;
for(int p = 18; p >= 0; p--) {
if(curr + (1 << (p + 1)) <= r) {
res += j[curr][bal][p].val;
bal = j[curr][bal][p].toX;
curr += (1 << (p + 1));
}
}
res += j[curr][bal][0].val;
cout << res << endl;
}
return 0;
}