#include <bits/stdc++.h>
#define ll long long
#define ls (st<<1)
#define rs ((st<<1)|1)
#define xm ((xl+xr)>>1)
using namespace std;
const int N=1e6+5;
const ll M=1e10;
int n,q,m,a[N],b[N],f[22][N],aa,ab,p,pq;
ll l,g[N];
vector<int>ksbz;
struct qw{
	int a,b,id;
	ll l;
}a[N];
struct qwe{
	ll mi,la;
	void tag(ll D){
		la+=D,mi-=D;
	}
}t[N<<2];
bool cmp(qw aa,qw ab){
	return aa.a<ab.a;
}
void jianshu(int st,int xl,int xr){
	if(xl==xr){
		t[st].mi=g[xl]+t[xl];
		return;
	}
	jianshu(ls,xl,xm);
	jianshu(rs,xm+1,xr);
	t[st].mi=min(t[ls].mi,t[rs].mi);
}
void update(int st,int xl,int xr,int L,int R,ll D){
	if(L<=xl&&xr<=R){
		t[st].tag(D);
		return;
	}
	if(t[st].la){
		t[ls].tag(t[st].la);
		t[rs].tag(t[st].la);
		t[st].la=0;
	}
	if(L<=xm){
		update(ls,xl,xm,L);
	}
	if(xm+1<=R){
		update(rs,xm+1,xr,L);
	}
	t[st].mi=min(t[ls].mi,t[rs].mi);
}
ll query(int st,int xl,int xr,int R){
	if(xr<=R){
		return t[st].mi;
	}
	if(t[st].la){
		t[ls].tag(t[st].la);
		t[rs].tag(t[st].la);
		t[st].la=0;
	}
	if(R<=xm){
		return query(ls,xl,xm,R);
	}else{
		ll re=query(rs,xm+1,xr,R);
		return min(t[ls].mi,re);
	}
}
int main(){
//	freopen("trip.in","r",stdin);
//	freopen("trip.out","w",stdout);
//	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>q>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	for(int i=1;i<=n;i++){
		int le=1,ri=i,an;
		while(le<=ri){
			int mi=(le+ri)>>1;
			if(a[i]-a[mi]>m){
				le=mi+1;
			}else{
				an=mi;
				ri=mi-1;
			}
		}
		f[0][i]=an;
	}
	for(int i=1;i<=21;i++){
		for(int j=1;j<=n;j++){
			f[i][j]=f[i-1][f[i-1][j]];
		}
	}
	for(int i=1;i<=q;i++){
		cin>>aa>>ab;
		a[i]={aa,ab,i,0};
		if(aa<=ab){
			a[i].l=1;
			continue;
		}
		l=0,p=21;
		while(p>=0){
			if(f[p][aa]>ab){
				l+=(1<<p);
				aa=f[p][aa];
			}
			p--;
		}
		l++;
		aa=f[0][aa];
		if(aa>ab){
			a[i].l=0x3f3f3f3f3f3f3f3f;
		}else{
			a[i].l=l;
		}
	}
	sort(a+1,a+n+1,cmp);
	for(int i=2;i<=n;i++){
		if(f[0][i]==i){
			g[i]=g[i-1]+M;
			ksbz.push_back(i);
		}else{
			g[i]=g[f[0][i]]+1;
		}
	}
	ksbz.push_back(n+1);
	jianshu(1,1,n);
	p=1;
	for(int i=1;i<=n;i++){
		
		while(a[p].a==i){
			
			p++;
		}
	}
	return 0;
}