description: Recently, Petya learned about a new game "Slay the Dragon". As the name suggests, the player will have to fight with dragons. To defeat a dragon, you have to kill it and defend your castle. To do this, the player has a squad of n heroes, the strength of the i-th hero is equal to a_i.
  
  According to the rules of the game, exactly one hero should go kill the dragon, all the others will defend the castle. If the dragon's defense is equal to x, then you have to send a hero with a strength of at least x to kill it. If the dragon's attack power is y, then the total strength of the heroes defending the castle should be at least y.
  
  The player can increase the strength of any hero by 1 for one gold coin. This operation can be done any number of times.
  
  There are m dragons in the game, the i-th of them has defense equal to x_i and attack power equal to y_i. Petya was wondering what is the minimum number of coins he needs to spend to defeat the i-th dragon.
  
  Note that the task is solved independently for each dragon (improvements are not saved).
  
  Input
  
  The first line contains a single integer n (2 ≤ n ≤ 2 ⋅ 10^5) — number of heroes.
  
  The second line contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^{12}), where a_i is the strength of the i-th hero.
  
  The third line contains a single integer m (1 ≤ m ≤ 2 ⋅ 10^5) — the number of dragons.
  
  The next m lines contain two integers each, x_i and y_i (1 ≤ x_i ≤ 10^{12}; 1 ≤ y_i ≤ 10^{18}) — defense and attack power of the i-th dragon.
  
  Output
  
  Print m lines, i-th of which contains a single integer — the minimum number of coins that should be spent to defeat the i-th dragon.
  
  Example
  
  Input
  
  
  4
  3 6 2 3
  5
  3 12
  7 9
  4 14
  1 10
  8 7
  
  
  Output
  
  
  1
  2
  4
  0
  2
  
  Note
  
  To defeat the first dragon, you can increase the strength of the third hero by 1, then the strength of the heroes will be equal to [3, 6, 3, 3]. To kill the dragon, you can choose the first hero.
  
  To defeat the second dragon, you can increase the forces of the second and third heroes by 1, then the strength of the heroes will be equal to [3, 7, 3, 3]. To kill the dragon, you can choose a second hero.
  
  To defeat the third dragon, you can increase the strength of all the heroes by 1, then the strength of the heroes will be equal to [4, 7, 3, 4]. To kill the dragon, you can choose a fourth hero.
  
  To defeat the fourth dragon, you don't need to improve the heroes and choose a third hero to kill the dragon.
  
  To defeat the fifth dragon, you can increase the strength of the second hero by 2, then the strength of the heroes will be equal to [3, 8, 2, 3]. To kill the dragon, you can choose a second hero.
solution: import bisect
  import heapq
  import math
  import collections
  import sys
  import copy
  from functools import reduce
  import decimal
  from io import BytesIO, IOBase
  import os
  import itertools
  import functools
  from types import GeneratorType
  
  sys.setrecursionlimit(10 ** 9)
  decimal.getcontext().rounding = decimal.ROUND_HALF_UP
  
  graphDict = collections.defaultdict
  
  queue = collections.deque
  
  
  ################## pypy deep recursion handling ##############
  # Author = @pajenegod
  def bootstrap(f, stack=[]):
      def wrappedfunc(*args, **kwargs):
          to = f(*args, **kwargs)
          if stack:
              return to
          else:
              while True:
                  if type(to) is GeneratorType:
                      stack.append(to)
                      to = next(to)
                  else:
                      stack.pop()
                      if not stack:
                          return to
                      to = stack[-1].send(to)
  
      return wrappedfunc
  
  
  ################## Graphs ###################
  class Graphs:
      def __init__(self):
          self.graph = graphDict(set)
  
      def add_edge(self, u, v):
          self.graph[u].add(v)
          self.graph[v].add(u)
  
      def dfs_utility(self, nodes, visited_nodes):
          visited_nodes.add(nodes)
          for neighbour in self.graph[nodes]:
              if neighbour not in visited_nodes:
                  self.dfs_utility(neighbour, visited_nodes)
  
      def dfs(self, node):
          Visited = set()
          self.dfs_utility(i, Visited)
  
      def bfs(self, node, f_node):
          count = float("inf")
          visited = set()
          level = 0
          if node not in visited:
              queue.append([node, level])
              visited.add(node)
          flag = 0
          while queue:
              parent = queue.popleft()
              if parent[0] == f_node:
                  flag = 1
                  count = min(count, parent[1])
              level = parent[1] + 1
              for item in self.graph[parent[0]]:
                  if item not in visited:
                      queue.append([item, level])
                      visited.add(item)
          return count if flag else -1
  
  
  ################### Tree Implementaion ##############
  class Tree:
      def __init__(self, data):
          self.data = data
          self.left = None
          self.right = None
  
  
  def inorder(node, lis):
      if node:
          inorder(node.left, lis)
          lis.append(node.data)
          inorder(node.right, lis)
      return lis
  
  
  def leaf_node_sum(root):
      if root is None:
          return 0
      if root.left is None and root.right is None:
          return root.data
      return leaf_node_sum(root.left) + leaf_node_sum(root.right)
  
  
  def hight(root):
      if root is None:
          return -1
      if root.left is None and root.right is None:
          return 0
      return max(hight(root.left), hight(root.right)) + 1
  
  
  ################## Union Find #######################
  class UF:
      """An implementation of union find data structure.
      It uses weighted quick union by rank with path compression.
      """
  
      def __init__(self, N):
          """Initialize an empty union find object with N items.
  
          Args:
              N: Number of items in the union find object.
          """
  
          self._id = list(range(N))
          self._count = N
          self._rank = [0] * N
  
      def find(self, p):
          """Find the set identifier for the item p."""
  
          id = self._id
          while p != id[p]:
              p = id[p]  # Path compression using halving.
          return p
  
      def count(self):
          """Return the number of items."""
  
          return self._count
  
      def connected(self, p, q):
          """Check if the items p and q are on the same set or not."""
  
          return self.find(p) == self.find(q)
  
      def union(self, p, q):
          """Combine sets containing p and q into a single set."""
  
          id = self._id
          rank = self._rank
  
          i = self.find(p)
          j = self.find(q)
          if i == j:
              return
  
          self._count -= 1
          if rank[i] < rank[j]:
              id[i] = j
          elif rank[i] > rank[j]:
              id[j] = i
          else:
              id[j] = i
              rank[i] += 1
  
      def add_roads(self):
          return set(self._id)
  
      def __str__(self):
          """String representation of the union find object."""
          return " ".join([str(x) for x in self._id])
  
      def __repr__(self):
          """Representation of the union find object."""
          return "UF(" + str(self) + ")"
  
  
  #################################################
  
  def rounding(n):
      return int(decimal.Decimal(f'{n}').to_integral_value())
  
  
  def factors(n):
      return set(reduce(list.__add__,
                        ([i, n // i] for i in range(1, int(n ** 0.5) + 1) if n % i == 0), []))
  
  
  def p_sum(array):
      return list(itertools.accumulate(array))
  
  
  def diophantine(a: int, b: int, c: int):
      d, x, y = extended_gcd(a, b)
      r = c // d
      return r * x, r * y
  
  
  @bootstrap
  def extended_gcd(a: int, b: int):
      if b == 0:
          d, x, y = a, 1, 0
      else:
          (d, p, q) = yield extended_gcd(b, a % b)
          x = q
          y = p - q * (a // b)
  
      yield d, x, y
  
  
  ################################ <fast I/O> ###########################################
  BUFSIZE = 8192
  
  
  class FastIO(IOBase):
      newlines = 0
  
      def __init__(self, file):
          self._fd = file.fileno()
          self.buffer = BytesIO()
          self.writable = "x" in file.mode or "r" not in file.mode
          self.write = self.buffer.write if self.writable else None
  
      def read(self):
          while True:
              b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
              if not b:
                  break
              ptr = self.buffer.tell()
              self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines = 0
          return self.buffer.read()
  
      def readline(self, **kwargs):
          while self.newlines == 0:
              b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
              self.newlines = b.count(b"\n") + (not b)
              ptr = self.buffer.tell()
              self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines -= 1
          return self.buffer.readline()
  
      def flush(self):
          if self.writable:
              os.write(self._fd, self.buffer.getvalue())
              self.buffer.truncate(0), self.buffer.seek(0)
  
  
  class IOWrapper(IOBase):
      def __init__(self, file):
          self.buffer = FastIO(file)
          self.flush = self.buffer.flush
          self.writable = self.buffer.writable
          self.write = lambda s: self.buffer.write(s.encode("ascii"))
          self.read = lambda: self.buffer.read().decode("ascii")
          self.readline = lambda: self.buffer.readline().decode("ascii")
  
  
  sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
  
  
  #############################################<I/O Region >##############################################
  
  
  def inp():
      return sys.stdin.readline().strip()
  
  
  def map_inp(v_type):
      return map(v_type, inp().split())
  
  
  def list_inp(v_type):
      return list(map_inp(v_type))
  
  
  ######################################## Solution ####################################
  
  
  n = int(inp())
  arr = list_inp(int)
  arr.sort()
  pre = [0] + p_sum(arr)
  m = int(inp())
  for i in range(m):
      ans = 0
      x, y = map_inp(int)
      temp = bisect.bisect_right(arr, x)
      if temp == n:
          ans += x - arr[temp - 1]
          if y > pre[n] - arr[temp - 1]:
              ans += y - (pre[n] - arr[temp - 1])
          print(ans)
      elif temp == 0:
          if pre[n] - arr[0] >= y:
              print(0)
          else:
              print(y - (pre[n] - arr[0]))
      else:
          if pre[n] - arr[temp] >= y:
              print(0)
          else:
              q = x - arr[temp - 1]
              if pre[n] - arr[temp - 1] >= y:
                  q += 0
              else:
                  q += y - (pre[n] - arr[temp - 1])
              w = y - (pre[n] - arr[temp])
              print(min(q, w))
  