#include<stdio.h>
static inline int IN(void)
{
  int x=0,f=0,c=getchar();while(c<48||c>57){f^=(c==45),c=getchar();}
  while(c>47&&c<58){x=x*10+c-48,c=getchar();}return f?-x:x;
}
static inline void OUT(long x){if(x<0){putchar('-'),x=-x;}if(x>=10){OUT(x/10);}putchar(x%10+48);}
static inline long Min(long a,long b){return a<b?a:b;}
static inline long Max(long a,long b){return a>b?a:b;}
int main(void)
{
  int N=IN(),A=0,T=0,Q=0,X=0;long mn=-5e18,mx=5e18,sum=0;
  while(N--)
  {
    A=IN(),T=IN();
    if(T==1){sum+=A;mn+=A;mx+=A;}
    else if(T==2){if(mn<A){mn=A;}if(mx<A){mx=A;}}
    else{if(mn>A){mn=A;}if(mx>A){mx=A;}}
  }
  Q=IN();while(Q--){X=IN();OUT(Min(Max(X+sum,mn),mx));puts("");}
}
#include<bits/stdc++.h>
#define maxn 200010
 #define int long long
// #define maxn 
// #define mod 
using namespace std;
const long long INF=1ll<<60;
// template<class T>T ABS(T x) {return x<0?-x:x;}
//int ksm(int x,int y) {int r=1;while(y) y&1?r=1ll*r*x%mod:0,x=1ll*x*x%mod,y>>=1;return r;}
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*w;
}
// struct Edge{int to,next;}a[maxn];
// int h[maxn],cnt;
// void add(int x,int y) {a[++cnt]=(Edge){y,h[x]},h[x]=cnt,a[++cnt]=(Edge){x,h[y]},h[y]=cnt;}
struct Xi{int vl,nm;}X[maxn];
bool cmp(Xi x,Xi y) {return x.vl<y.vl;}
int A[maxn],T[maxn],n,Q,pr[maxn];
int ABS(int x) {return x<0?-x:x;}
signed main()
{
//	freopen("pai.in","r",stdin);
//	freopen("pai2.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++) A[i]=read(),T[i]=read();
	Q=read();
	for(int i=1;i<=Q;i++) X[i]=(Xi){read(),i};
	sort(X+1,X+1+Q,cmp);
	int l=1,r=Q,tt=0,wl=INF,wr=INF;
	for(int i=1;i<=n;i++)
		if(T[i]==1) tt+=A[i],wl+=A[i],wr+=A[i];
		else if(T[i]==2)
		{
//			cerr<<wl<<' '<<wr<<'\n';
			while(l<=Q&&l<r+1&&X[l].vl+tt<A[i]) X[l].vl=A[i]-tt,++l;
			wl=(ABS(wl-INF)<1e16?A[i]:max(A[i],wl));
			if(ABS(wr-INF)>1e16) wr=max(wr,A[i]);
//			cerr<<wl<<'?'<<wr<<'\n';
		}
		else if(T[i]==3)
		{
//			cerr<<wl<<' '<<wr<<'\n';
			while(r&&r>l-1&&X[r].vl+tt>A[i]) X[r].vl=A[i]-tt,--r;
			wr=(ABS(wr-INF)<1e16?A[i]:min(wr,A[i]));
			if(ABS(wl-INF)>1e16) wl=min(wl,A[i]);
//			cerr<<wl<<' '<<wr<<'\n';
		}
		else assert(0);
	for(int i=1;i<=l-1;i++) pr[X[i].nm]=wl;
	for(int i=r+1;i<=Q;i++) pr[X[i].nm]=wr;
	for(int i=l;i<=r;i++) pr[X[i].nm]=X[i].vl+tt;
	for(int i=1;i<=Q;i++) cout<<pr[i]<<'\n';
	return 0;
}
//			if(l-1>=r+1)
//			{
//				tt=A[i];
//				for(int j=i+1;j<=n;j++)
//					if(T[j]==1) tt+=A[j];
//					else if(T[j]==2) tt=max(tt,A[j]);
//					else if(T[j]==3) tt=min(tt,A[j]);
//					else assert(0);
//				for(int j=1;j<=Q;j++) cout<<tt<<'\n';
//				return 0;
//			}