#include <bits/stdc++.h>
 
#define endl '\n'
#define fi first
#define se second
#define MOD(n,k) ( ( ((n) % (k)) + (k) ) % (k))
#define forn(i,n) for (int i = 0; i < n; i++)
#define forr(i,a,b) for (int i = a; i <= b; i++)
#define all(v) v.begin(), v.end()
#define pb(x) push_back(x)
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;

const int MX = (1 << 18) + 5;
int n, q, v[MX], w[MX], mem[20][MX], col[20][MX], act[20], l[MX], res[MX];
vi pos[MX];

int dp (int u, int k) {
	if (k < 0) return -1e9;
	if (u < 0) return 0;

	int &res = mem[u][k];
	if (col[u][k] == act[u]) return res;
	col[u][k] = act[u];

	return res = max(
		dp(u - 1, k),
		dp(u - 1, k - w[act[u]]) + v[act[u]]
	);
}

void dfs (int u, int lvl) {
	if (u > n) return;
	act[lvl] = u;

	for (int j : pos[u])
		res[j] = dp(lvl, l[j]);

	dfs(2 * u, lvl + 1);
	dfs(2 * u + 1, lvl + 1);
}

int main () {
	ios_base::sync_with_stdio(0); cin.tie(0);
	memset(col, -1, sizeof(col));

	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> v[i] >> w[i];

	cin >> q;
	forn (i, q) {
		int v;
		cin >> v >> l[i];
		pos[v].pb(i);
	}

	dfs(1, 0);

	forn (i, q)
		cout << res[i] << endl;

	return 0;
}
