#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
typedef pair <int,int> pii;
 
const int RLEN=1<<18|1;
inline char nc() {
	static char ibuf[RLEN],*ib,*ob;
	(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
	return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
	char ch=nc(); int i=0,f=1;
	while(!isdigit(ch)) {if(ch=='-')f=-1; ch=nc();}
	while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
	return i*f;
}

const int N=1e5+50, INF=0x3f3f3f3f;
int n,bz=1,cnt;
int a[N],b[N],c[N],d[N],e[N],ans[N];
struct L {
	int l,r; 
	L(int l,int r) : l(l),r(r) {}
	friend inline bool operator <(const L &a,const L &b) {return a.l<b.l || (a.l==b.l && a.r>b.r);}
};
struct R {
	int l,r;
	R(int l,int r) : l(l),r(r) {}
	friend inline bool operator <(const R &a,const R &b) {return a.r<b.r || (a.r==b.r && a.l>b.l);}
};

multiset <int> lq[N];
multiset <int> rq[N];
multiset <L> ls; 
multiset <R> rs;

inline int kth(int x) {return lower_bound(c+1,c+n+2,x)-c;}
int main() {
	n=rd();
	for(int i=1;i<=n;i++) a[i]=rd(), b[i]=rd();
	for(int i=1;i<=n+1;i++) c[i]=rd(), d[i]=e[i]=1;
	sort(c+1,c+n+2);
	for(int i=1;i<=n && bz;i++) {
		if(a[i]>c[n+1] && b[i]>c[n+1]) bz=0;
		if(a[i]<=c[n+1]) {
			a[i]=kth(a[i]); b[i]=kth(b[i]);
			--d[a[i]]; --e[a[i]];
			if(b[i]<a[i]) rq[a[i]].insert(b[i]+1), lq[b[i]+1].insert(a[i]);
		} else --d[kth(b[i])], --e[kth(b[i])], ++cnt;
	}
	if(!bz) {for(int i=rd();i;i--) puts("-1"); return 0;}
	for(int i=n+1;i>=1 && bz;i--) {
		d[i]+=d[i+1];
		for(auto v:rq[i]) ls.insert(L(v,i));
		while(d[i]<0) {
			++cnt;
			if(!ls.size()) {bz=0; break;}
			L t=*ls.begin(); ls.erase(ls.begin());
			lq[t.l].erase(lq[t.l].find(t.r));
			++d[i]; --d[t.l-1];
			++e[t.r]; --e[t.l-1];
		}
	}
	if(!bz) {for(int i=rd();i;i--) puts("-1"); return 0;}
	for(int i=n;i>=1;i--) e[i]+=e[i+1];
	for(int i=1;i<=n+1;i++) {d[i]=e[i]-e[i-1];}
	for(int i=1;i<=n+1 && bz;i++) {
		d[i]+=d[i-1];
		for(auto v:lq[i]) rs.insert(R(i,v));
		while(d[i]<1) {
			++cnt;
			if(!rs.size()) {bz=0; cnt=INF; for(int j=i+1;j<=n+1;++j) ans[j]=cnt; break;}
			R t=*--rs.end(); rs.erase(--rs.end());
			++d[i]; --d[t.r+1];
		} ans[i]=cnt;
	}
	for(int i=rd();i;i--) {
		int x=rd(), y=rd();
		int w=INF;
		if(x<=c[n+1]) w=min(w,ans[kth(x)]);
		if(y<=c[n+1]) w=min(w,ans[kth(y)]+1);
		printf("%d\n",(w==INF) ? -1 : (n-w+1));
	}
}