local bls, brs = bit.lshift, bit.rshift
local mmi, mma = math.min, math.max
local n = io.read("*n")
local v, w = {}, {}
for i = 1, n do
  v[i], w[i] = io.read("*n", "*n")
end
local head_tbl = {}
local box = {}
local ten5 = 100000
for i = 256, mmi(n, 1023) do
  head_tbl[i - 255] = {}
  local tbl = head_tbl[i - 255]
  for j = 1, ten5 do
    tbl[j] = 0
  end
  local jlim = i < 512 and 511 or 1023
  local klim = i < 512 and 9 or 10
  for j = 1, jlim do
    local tmpi, tmpj = i, j
    local weight, val = 0, 0
    for k = 1, klim do
      if tmpj % 2 == 1 then
        val = val + v[tmpi]
        weight = weight + w[tmpi]
      end
      tmpi = brs(tmpi, 1)
      tmpj = brs(tmpj, 1)
    end
    if weight <= ten5 then
      tbl[weight] = mma(tbl[weight], val)
    end
  end
  for i = 2, ten5 do
    tbl[i] = mma(tbl[i], tbl[i - 1])
  end
end
local function debug(...)
  -- print(...)
end
local function output(z)
  print(z)
end

debug(os.clock(), collectgarbage("count"))
local q = io.read("*n")
for iq = 1, q do
  if iq % 1000 == 0 then
    debug(iq, os.clock())
  end
  local pos, wlim = io.read("*n", "*n")
  local deg = 0
  do
    local tmp = pos
    while 0 < tmp do
      deg, tmp = deg + 1, brs(tmp, 1)
    end
  end
  if pos < 256 then
    local ans = 0
    local tot = bls(1, deg)
    for j = 0, tot - 1 do
      local tmpi, tmpj = pos, j
      local val, weight = 0, 0
      for k = 1, deg do
        if tmpj % 2 == 1 then
          val, weight = val + v[tmpi], weight + w[tmpi]
        end
        tmpi, tmpj = brs(tmpi, 1), brs(tmpj, 1)
      end
      if weight <= wlim then
        ans = mma(ans, val)
      end
    end
    output(ans)
  elseif pos < 1024 then
    output(head_tbl[pos - 255][wlim])
  else
    deg = deg - 10
    local basepos = pos
    for i = 1, deg do
      basepos = brs(basepos, 1)
    end
    local tbl = head_tbl[basepos - 255]
    local ans = tbl[wlim]
    local tot = bls(1, deg)
    for j = 1, tot - 1 do
      local tmpi, tmpj = pos, j
      local val, weight = 0, 0
      for k = 1, deg do
        if tmpj % 2 == 1 then
          val, weight = val + v[tmpi], weight + w[tmpi]
        end
        tmpi, tmpj = brs(tmpi, 1), brs(tmpj, 1)
      end
      if weight <= wlim then
        ans = mma(ans, val)
      end
      if weight < wlim then
        ans = mma(ans, val + tbl[wlim - weight])
      end
    end
    output(ans)
  end
end
debug(os.clock())
