#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int k;
void solve(){
int n,q;
cin>>n>>q>>k;
vector<int>v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
if(n%2==0){
v.pop_back();
n--;
}
vector<int>pref(n+1);
pref[0]=0;
for(int i=0;i<n;i++){
pref[i+1]=pref[i]+(i%2==0?v[i]:-v[i]);
//cout<<pref[i+1]<<' ';
}
//cout<<endl;
vector<int>bigpref(n+1,0);
bigpref[0]=0;
int pr1=0,pr2=0;
//smth
vector<int>breaks;
breaks.push_back(-1);
for(int i=0;i<n;i++){
if(i%2==0)continue;
if(v[i]>=(max(v[i-1]%k,v[i+1]%k))){
breaks.push_back(i);
int add=(pref[i-1]-pr1)/k;
pr2+=add;
bigpref[i]=pr2;
pr1=pref[i+1];
}
}
breaks.push_back(n);
//for(auto x:breaks){cout<<x<<' ';}cout<<endl;
//for(auto x:pref){cout<<x<<' ';}cout<<endl;
//for(auto x:bigpref){cout<<x<<' ';}cout<<endl;
for(int i=0;i<q;i++){
int l,r;
cin>>l>>r;
l--;
r--;
if(l%2!=0)l++;
if(r%2!=0)r--;
auto it=lower_bound(breaks.begin(),breaks.end(),l);
int next=*it;
it=lower_bound(breaks.begin(),breaks.end(),r);
it--;
int prev=*it;
int ans=0;
//cout<<l<<' '<<next<<' '<<prev<<' '<<r<<endl;
if(prev<next){
ans+=(pref[r+1]-pref[l])/k;
//cout<<(pref[r+1]-pref[l])/k<<' ';
}else{
ans+=(pref[next]-pref[l])/k;
ans+=bigpref[prev]-bigpref[next];
ans+=(pref[r+1]-pref[prev+1])/k;
//cout<<(pref[next]-pref[l])/k<<' '<<bigpref[prev]-bigpref[next]<<' '<<(pref[r+1]-pref[prev+1])/k;
}
//cout<<endl;
cout<<ans<<endl;
}
}
signed main(){
cin.tie(0);
ios::sync_with_stdio(false);
int t=1;
//cin>>t;
while(t--)solve();
}