Problem: Lord Tirek is a centaur and the main antagonist in the season four finale episodes in the series "My Little Pony: Friendship Is Magic". In "Twilight's Kingdom" (Part 1), Tirek escapes from Tartarus and drains magic from ponies to grow stronger.

<image>

The core skill of Tirek is called Absorb Mana. It takes all mana from a magic creature and gives them to the caster.

Now to simplify the problem, assume you have n ponies (numbered from 1 to n). Each pony has three attributes:

  * si : amount of mana that the pony has at time 0; 
  * mi : maximum mana that the pony can have; 
  * ri : mana regeneration per unit time. 



Lord Tirek will do m instructions, each of them can be described with three integers: ti, li, ri. The instruction means that at time ti, Tirek will use Absorb Mana on ponies with numbers from li to ri (both borders inclusive). We'll give you all the m instructions in order, count how much mana Tirek absorbs for each instruction.

Input

The first line contains an integer n (1 ≤ n ≤ 105) — the number of ponies. Each of the next n lines contains three integers si, mi, ri (0 ≤ si ≤ mi ≤ 105; 0 ≤ ri ≤ 105), describing a pony. 

The next line contains an integer m (1 ≤ m ≤ 105) — the number of instructions. Each of the next m lines contains three integers ti, li, ri (0 ≤ ti ≤ 109; 1 ≤ li ≤ ri ≤ n), describing an instruction of Lord Tirek. The instructions are given in strictly increasing order of ti (all ti are distinct).

Output

For each instruction, output a single line which contains a single integer, the total mana absorbed in this instruction.

Examples

Input

5
0 10 1
0 12 1
0 20 1
0 12 1
0 10 1
2
5 1 5
19 1 5


Output

25
58

Note

Every pony starts with zero mana. For the first instruction, each pony has 5 mana, so you get 25 mana in total and each pony has 0 mana after the first instruction.

For the second instruction, pony 3 has 14 mana and other ponies have mana equal to their mi.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long N = 1 << 17;
const long long MN = N;
long long s[MN];
long long m[MN];
long long rr[MN];
bool st[2 * N];
long long tme[2 * N];
long long lz[2 * N];
long long nn;
vector<pair<long long, pair<long long, long long> > > manaFull[2 * N];
struct second {
  long long s, m, r;
};
void f1(long long k, long long l, long long r) {
  for (long long i = l; i <= r; ++i) {
    if (rr[i]) {
      manaFull[k].push_back({m[i] / rr[i] + !!(m[i] % rr[i]), {m[i], rr[i]}});
    } else {
      manaFull[k].push_back({1e18, {m[i], rr[i]}});
    }
  }
  sort(manaFull[k].begin(), manaFull[k].end());
  for (long long i = 1; i < manaFull[k].size(); ++i) {
    manaFull[k][i].second.first += manaFull[k][i - 1].second.first;
  }
  for (long long i = (long long)manaFull[k].size() - 1; i > 0; --i) {
    manaFull[k][i - 1].second.second += manaFull[k][i].second.second;
  }
  if (l == r) return;
  long long mid = (l + r) / 2;
  f1(k * 2, l, mid);
  f1(k * 2 + 1, mid + 1, r);
}
long long getFirstNotFull(long long k, long long t) {
  long long lo = 0;
  long long hi = (long long)manaFull[k].size() - 1;
  long long res = hi + 1;
  while (lo <= hi) {
    long long mid = (lo + hi) / 2;
    if (manaFull[k][mid].first > t) {
      hi = mid - 1;
      res = mid;
    } else {
      lo = mid + 1;
    }
  }
  return res;
}
void lol(long long k, long long l, long long r, long long t) {
  if (l < r && lz[k]) {
    lz[k] = 0;
    lz[k * 2] = 1;
    lz[k * 2 + 1] = 1;
    tme[k * 2] = tme[k];
    tme[k * 2 + 1] = tme[k];
  }
}
bool eka[2 * N];
long long absorbMana(long long k, long long l, long long r, long long x,
                     long long y, long long t) {
  long long res = 0;
  if (l > y || r < x) return 0;
  if (l >= x && r <= y && lz[k]) {
    long long firstNotFull = getFirstNotFull(k, t - tme[k]);
    if (firstNotFull != 0) {
      res += manaFull[k][firstNotFull - 1].second.first;
    }
    long long sz = r - l + 1;
    if (firstNotFull != sz)
      res += (manaFull[k][firstNotFull].second.second) * (t - tme[k]);
    if (eka[k]) {
      eka[k] = 0;
      res = min(m[k - N], s[k - N] + (t - tme[k]) * rr[k - N]);
    }
    lz[k] = 1;
    tme[k] = t;
    return res;
  }
  lol(k, l, r, t);
  long long mid = (l + r) / 2;
  long long q = absorbMana(k * 2, l, mid, x, y, t);
  long long w = absorbMana(k * 2 + 1, mid + 1, r, x, y, t);
  if (l >= x && r <= y) {
    lz[k] = 1;
    tme[k] = t;
  }
  return q + w;
}
int main() {
  long long n;
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  nn = n;
  for (long long i = 0; i < n; ++i) {
    cin >> s[i] >> m[i] >> rr[i];
    lz[i + N] = 1;
    eka[i + N] = 1;
  }
  f1(1, 0, N - 1);
  long long m;
  cin >> m;
  for (long long i = 0; i < m; ++i) {
    long long t, l, r;
    cin >> t >> l >> r;
    cout << absorbMana(1, 0, N - 1, l - 1, r - 1, t) << '\n';
  }
}