#include<bits/stdc++.h>
using namespace std;
template<typename T>inline T read(){
	T f=0,x=0;char c=getchar();
	while(!isdigit(c)) f=c=='-',c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return f?-x:x;
}
namespace run{
	typedef pair<int,int> P;
	const int N=1e5+9;
	int ans[N],n,A[N],C[N],D[N],B[N],m,sum[N],pre[N],used[N];
	inline int id(int x){return lower_bound(D+1,D+m+1,x)-D;}
	vector<int> pos[N];
	priority_queue<P> pq;
	int main(){
		n=read<int>();
		for(int i=1;i<=n;i++) A[i]=read<int>(),B[i]=read<int>();
		for(int i=1;i<=n+1;i++) D[i]=C[i]=read<int>();
		sort(D+1,D+n+2),m=unique(D+1,D+n+2)-D-1;
		for(int i=1;i<=n+1;i++) C[i]=id(C[i]);
		for(int i=1;i<=n;i++) A[i]=id(A[i]),B[i]=id(B[i]);

		for(int i=1;i<=n+1;i++){sum[C[i]]--;if(i<=n) sum[A[i]]++;}
		for(int i=1;i<=n+1;i++) sum[i]+=sum[i-1];

		int Q=read<int>();
		for(int i=1;i<=n;i++)
			if(B[i]<A[i]) pos[A[i]-1].push_back(i);
			else used[i]=1;
		int tmp=0;
		for(int i=n+1,s=0;i>=1;i--){
			for(int j=0;j<pos[i].size();j++) pq.push(P(-B[pos[i][j]],pos[i][j]));
			s+=pre[i],assert(s>=0);
			while(s+sum[i]<=-2){
				if(pq.empty()){while(Q--) puts("-1");return 0;}
				P o=pq.top();pq.pop();int l=-o.first,id=o.second,r=A[id]-1;
				pre[r]++,s++,pre[l-1]--,used[id]=1,tmp++;
			}
		}
		for(int i=n+1;i>=1;i--) sum[i]+=pre[i]+=pre[i+1];
		for(int i=1;i<=n+1;i++) pre[i]=0,pos[i].clear();

		for(int i=1;i<=n;i++)
			if(!used[i]) pos[B[i]].push_back(i);
		pre[0]=sum[0]=0,pos[0].clear();
		while(!pq.empty()) pq.pop();
		for(int i=0,s=0;i<=n+1;i++){
			for(int j=0;j<pos[i].size();j++) pq.push(P(A[pos[i][j]],pos[i][j]));
			s+=pre[i];
			while(sum[i]+s<0){
				if(pq.empty()){
					for(int j=i+1;j<=n+2;j++) ans[j]=-1;
					goto where;
				}
				P o=pq.top();pq.pop();int id=o.second,l=B[id],r=A[id];
				pre[l]++,s++,pre[r]--,tmp++;
			}
			ans[i+1]=tmp;
		}

		where:
	//	for(int i=1;i<=n+2;i++) cout<<ans[i]<<" ";cout<<endl;
		for(int i=1;i<=Q;i++){
			int x=read<int>(),y=read<int>(),ret=-1,tmp;
			if((tmp=ans[id(x)])!=-1) ret=max(ret,n-tmp+1);
			if((tmp=ans[id(y)])!=-1) ret=max(ret,n-tmp);
			printf("%d\n",ret);
		}
		return 0;
	}
}
int main(){
#ifdef my
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	return run::main();
}