#include <bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define pb push_back
#define si second
#define int long long
#define mod  998244353 //1000000007
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define double long double
#define all(o) o.begin(),o.end()
using namespace std;

int power(int x, int y)
{
    int res = 1LL;
    x = x % mod;
    while (y > 0)
    {
        if (y & 1)
            res = (res*x) % mod;
        y = y>>1; // y = y/2
        x = (x*x) % mod;
    }
    return res%mod;
}
int inv(int  n)
{
    return power(n,mod-2)%mod;
}

int n,q;



int a[200005],t[200005],b[200005];
int calc(int k){

    int i;
    
    for(i=1;i<=n;i++){
        if(t[i]==1)
            k+=a[i];
        else if(t[i]==2)
            k=max(k,a[i]);
        else 
            k=min(k,a[i]);
    }
    return k;
}
void solve()
{

    cin>>n;
    int i;
    for(i=1;i<=n;i++)
        cin>>a[i]>>t[i];

    int l=-1e18,r=1e18;
    int sum=0,ll=0,lr=0;

    for(i=1;i<=n;i++){
        if(t[i]==1)
            sum+=a[i];
        else if(t[i]==2){
            l=max(l,a[i]-sum);
            ll=i;
        } 
        else
        {   r=min(r,a[i]-sum);
            lr=i;
        }
    }
    cin>>q; 
    for(i=1;i<=q;i++)
        cin>>b[i];


    int lans=calc(l),rans=calc(r);

    for(i=1;i<=q;i++)
        if(b[i]<=l)
            cout<<lans<<"\n";
        else if(b[i]>=r)
            cout<<rans<<"\n";
        else cout<<b[i]+sum<<"\n";
        












}

int32_t main(){
    fast
    int t=1;
  
    // cin>>t;
    while(t--) 

    {
        solve();
    }
}
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a) for (int i = 0; i < (int)(a); i++)
#define sz(x) (int)(x).size()
#define pcnt __builtin_popcountll
typedef long long ll;
template<typename T>istream& operator>>(istream&i,vector<T>&v){rep(j,sz(v))i>>v[j];return i;}
template<typename T>string join(const vector<T>&v){stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}
template<typename T>ostream& operator<<(ostream&o,const vector<T>&v){if(sz(v))o<<join(v);return o;}
template<typename T1,typename T2>istream& operator>>(istream&i,pair<T1,T2>&v){return i>>v.first>>v.second;}
template<typename T1,typename T2>ostream& operator<<(ostream&o,const pair<T1,T2>&v){return o<<v.first<<","<<v.second;}
template<typename T>bool mins(T& x,const T&y){if(x>y){x=y;return true;}else return false;}
template<typename T>bool maxs(T& x,const T&y){if(x<y){x=y;return true;}else return false;}
template<typename T>T dup(T x, T y){return (x+y-1)/y;}
template<typename T>ll suma(const vector<T>&a){ll res(0);for(auto&&x:a)res+=x;return res;}
int keta(ll n) { int ret = 0; while (n>0) { n/=10; ret++; } return ret; }

#ifdef _DEBUG
inline void dump() { cerr << endl; }
template <typename Head> void dump(Head &&head) { cerr << head; dump(); }
template <typename Head, typename... Tail> void dump(Head &&head, Tail &&... tail) { cerr << head << ", "; dump(forward<Tail>(tail)...); }
#define debug(...) do { cerr << __LINE__ << ":\t" << #__VA_ARGS__ << " = "; dump(__VA_ARGS__); } while (false)
#else
#define dump(...)
#define debug(...)
#endif

template <typename T> struct edge {
  int src, to;
  T cost;
  edge(int to, T cost) : src(-1), to(to), cost(cost) {}
  edge(int src, int to, T cost) : src(src), to(to), cost(cost) {}
  edge &operator=(const int &x) {
    to = x;
    return *this;
  }
  operator int() const { return to; }
};
template <typename T> using Edges = vector<edge<T>>;
template <typename T> using WeightedGraph = vector<Edges<T>>;
using UnWeightedGraph = vector<vector<int>>;

const ll LINF = 1LL << 60;
const int INF = 1001001001;

/////////////////////////////////////////////////////////////////////

void solve()
{
  int n; cin>>n;
  ll mi = -LINF;
  ll ma = LINF;
  ll fl = 0;
  rep(i, n) {
    ll a,t; cin>>a>>t;
    if (t == 1) {
      mi += a;
      ma += a;
      fl += a;
    }
    if (t == 2) {
      maxs(mi, a);
      maxs(ma, mi);
    }
    if (t == 3) {
      mins(ma, a);
      mins(mi, ma);
    }
  }
  int q; cin>>q;
  vector<ll> x(q); cin>>x;
  rep(i, q) {
    ll v = x[i] + fl;
    mins(v, ma);
    maxs(v, mi);
    cout << v << "\n";
  }

}

int main()
{
  int t;
  t = 1;
  // cin>>t;
  while (t--) solve();

  return 0;
}
