#include <bits/stdc++.h>
using namespace ::std;
namespace Sarzu {
const int N = (int)2e5 + 5, z = 256 * 1024, LOG = 19;
int d[2 * z], dp[LOG][N], koszt[LOG][N];
int asdf[N];
pair<int, int> tab[N];
int n, q, poc[N], zas[N];
map<int, std::vector<int>> m;
void wstaw(int v, int x) {
  v += z;
  d[v] = x;
  v /= 2;
  while (v) {
    d[v] = max(d[2 * v], d[2 * v + 1]);
    v /= 2;
  }
}
int odczyt(int a, int b) {
  a += z - 1, b += z + 1;
  int wyn = 0;
  while (a != b - 1) {
    if (a % 2 == 0) wyn = max(wyn, d[a + 1]);
    if (b % 2 == 1) wyn = max(wyn, d[b - 1]);
    a /= 2, b /= 2;
  }
  return wyn;
}
int szukaj(int x) {
  auto it = upper_bound(poc + 1, poc + n + 1, x);
  int ret = (int)(it - poc);
  return ret - 1;
}
int znajdz(int v, int x) {
  if (zas[v] >= poc[x]) return 0;
  int wyn = 0, log = LOG - 1;
  while (log >= 0) {
    if (zas[dp[log][v]] < poc[x]) {
      wyn += koszt[log][v];
      v = dp[log][v];
    }
    log--;
  }
  wyn += koszt[0][v];
  return wyn;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int x, h;
    scanf("%d%d", &x, &h);
    tab[i] = {x, x + h};
    poc[i] = x;
    m[x + h].push_back(i);
  }
  int ost = (int)2e9 + 1;
  m[ost + 1].push_back(n + 1);
  wstaw(n + 1, ost + 1);
  poc[n + 1] = ost;
  tab[n + 1] = {ost, ost + 1};
  dp[0][n + 1] = n + 1;
  zas[n + 1] = ost + 1;
  for (int i = n; i >= 1; i--) {
    wstaw(i, tab[i].second);
    int poz = szukaj(tab[i].second);
    int maxi = odczyt(i, poz);
    if (maxi == tab[i].second) {
      int oj = szukaj(maxi) + 1;
      dp[0][i] = oj;
      if (oj != n + 1) koszt[0][i] = tab[oj].first - tab[i].second;
      zas[i] = maxi;
    } else {
      for (auto pop : m[maxi]) {
        if (dp[0][i] < dp[0][pop]) {
          asdf[i] = pop;
          dp[0][i] = dp[0][pop];
          koszt[0][i] = koszt[0][pop];
          zas[i] = zas[pop];
        }
      }
    }
  }
  for (int j = 1; j < LOG; j++)
    for (int i = 1; i <= n + 1; i++) {
      dp[j][i] = dp[j - 1][dp[j - 1][i]];
      koszt[j][i] = koszt[j - 1][i] + koszt[j - 1][dp[j - 1][i]];
    }
  scanf("%d", &q);
  while (q) {
    int a, b;
    scanf("%d%d", &a, &b);
    q--;
  }
  return 0;
}
}  // namespace Sarzu
namespace Marek {
const int z = 256 * 1024;
std::pair<int, int> drzewo[z * 2 + 7];
int pos[z], zasieg[z];
std::pair<int, int> nast[z];
int oj[z][15];
int koszt[z];
bool odw[z];
std::vector<int> wyniki;
void insert(int a, int war, int koszt) {
  a += z;
  drzewo[a] = {war, -koszt};
  a /= 2;
  while (a != 0) {
    drzewo[a] = std::max(drzewo[a * 2], drzewo[a * 2 + 1]);
    a /= 2;
  }
}
std::pair<int, int> get(int a, int b) {
  a += z - 1, b += z + 1;
  std::pair<int, int> ret = {0, 0};
  while (a != b - 1) {
    if (a % 2 == 0) ret = std::max(ret, drzewo[a + 1]);
    if (b % 2 == 1) ret = std::max(ret, drzewo[b - 1]);
    a /= 2, b /= 2;
  }
  return ret;
}
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) scanf("%d%d", &pos[i], &zasieg[i]);
  pos[N + 1] = 1337133713;
  for (int i = 0; i < 15; i++) oj[N + 1][i] = N + 1;
  for (int i = N; i > 0; i--) {
    int next = int(std::upper_bound(pos + i, pos + N + 1, pos[i] + zasieg[i]) -
                   1 - pos);
    nast[i] = get(i, next);
    if (nast[i].first == 0)
      nast[i] = {i + 1, -(pos[i + 1] - pos[i] - zasieg[i])};
    nast[i].second =
        std::max(nast[i].second, -(pos[nast[i].first] - pos[i] - zasieg[i]));
    oj[i][0] = nast[i].first;
    for (int w = 1; w < 15; w++) oj[i][w] = oj[oj[i][w - 1]][w - 1];
    koszt[i] = koszt[nast[i].first] - nast[i].second;
    insert(i, nast[i].first, -nast[i].second);
  }
  int Q;
  scanf("%d", &Q);
  int a, b;
  while (Q--) {
    scanf("%d%d", &a, &b);
    int ter = a;
    int skok = 14;
    while (skok != -1) {
      if (oj[ter][skok] > b)
        skok--;
      else
        ter = oj[ter][skok];
    }
    wyniki.push_back(koszt[a] - koszt[ter]);
  }
  return 0;
}
}  // namespace Marek
int main() {
  Sarzu::main();
  std::rewind(stdin);
  Marek::main();
  int N = Sarzu::n;
  for (int i = N; i >= 1; i--) {
    if (Sarzu::dp[0][i] != Marek::oj[i][0]) {
      printf("Niestety %d %d (%d) (%d) %d (%d)\n", i, Sarzu::dp[0][i],
             Sarzu::poc[Sarzu::dp[0][i]], Sarzu::asdf[i], Marek::oj[i][0],
             Sarzu::poc[Marek::oj[i][0]]);
    }
  }
  for (auto it : Marek::wyniki) {
    printf("%d\n", it);
  }
}
