#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int n, q;
long long dp[1028][100009];
ll v[300009];
ll w[300009];

int limit=1024;

int main() {
	cin>>n;
  for(int i=1; i<=n; i++)
  {
    cin>>v[i]>>w[i];
  }
  for(int i=1; i<limit; i++)
  {
    for(int j=0; j<=100000; j++)
    {
      dp[i][j]=dp[i/2][j];
      if(j>=w[i])
      {
        dp[i][j]=max(dp[i][j], dp[i/2][j-w[i]]+v[i]);
      }
    }
  }
  cin>>q;
  for(int tt=1; tt<=q; tt++)
  {
    int s, L;
    cin>>s>>L;
    if(s<512)
    {
      cout<<dp[s][L]<<'\n';
      continue;
    }
    ll best=0;
    int extra=0;
    int u=s;
    while(u>=limit)
    {
      extra++;
      u/=2;
    }
    for(int msk=0; msk<(1<<extra); msk++)
    {
      ll wsum=0;
      ll vsum=0;
      u=s;
      int mm=msk;
      for(int d=0; d<extra; d++)
      {
        if(mm%2)
        {
          vsum+=v[u];
          wsum+=w[u];
        }
        mm/=2;
        u/=2;
      }
      if(wsum>L) continue;
      best=max(best, vsum+dp[u][L-wsum]);
    }
    cout<<best<<'\n';
  }
	return 0;
}
