#include <bits/stdc++.h>
using namespace std;
int const MAX = 1e5 + 41;
int n;
int q;
int s[MAX];
int m[MAX];
int r[MAX];
int const BLOCK = 441;
bool sp[MAX];
int lt[MAX];
int ltb[MAX];
vector<pair<int, int> > a[MAX];
vector<long long> prefsum[MAX];
vector<long long> prefspeed[MAX];
int const INF = 2e9 + 41;
void init() {
  for (int i = 0, k = 0; i < n; i += BLOCK, k++) {
    for (int j = 0; j <= BLOCK - 1; j++) {
      if (i + j >= n) break;
      int m = ::m[i + j];
      int r = ::r[i + j];
      if (r != 0) {
        a[k].push_back(make_pair((m + r - 1) / r, i + j));
      } else {
        a[k].push_back(make_pair(INF, i + j));
      }
    }
    sort(a[k].begin(), a[k].end());
    long long sm = 0;
    long long sr = 0;
    for (int j = 0; j <= (int)a[k].size() - 1; j++) {
      int m = ::m[a[k][j].second];
      int r = ::r[a[k][j].second];
      sm += m;
      sr += r;
      prefsum[k].push_back(sm);
      prefspeed[k].push_back(sr);
    }
  }
}
long long queryblock(int id, int t) {
  long long res = 0;
  int p = (int)(lower_bound(a[id].begin(), a[id].end(),
                            make_pair(t - ltb[id], INF)) -
                a[id].begin());
  p--;
  if (p >= 0) {
    res += prefsum[id][p];
  }
  res += prefspeed[id].back() * (t - ltb[id]);
  if (p >= 0) {
    res -= prefspeed[id][p] * (t - ltb[id]);
  }
  ltb[id] = t;
  return res;
}
long long bruteblock(int id, int l, int r, int t) {
  if (l > r) return 0LL;
  l -= BLOCK * id;
  r -= BLOCK * id;
  sp[id] = false;
  int sh = id * BLOCK;
  for (int i = 0; i <= (int)a[id].size() - 1; i++) {
    lt[sh + i] = max(lt[sh + i], ltb[id]);
  }
  long long res = 0;
  for (int i = l; i <= r; i++) {
    long long add = min((long long)m[sh + i],
                        (long long)::r[sh + i] * (t - lt[sh + i]) + s[sh + i]);
    res += add;
    lt[sh + i] = t;
    s[sh + i] = 0;
  }
  return res;
}
int getblockright(int x) {
  int res = (x / BLOCK + 1) * BLOCK - 1;
  res = min(res, n - 1);
  return res;
}
int getblockleft(int x) { return x / BLOCK * BLOCK; }
void solve() {
  init();
  scanf("%d", &q);
  for (int o = 1; o <= q; o++) {
    int t, l, r;
    scanf("%d %d %d", &t, &l, &r);
    l--;
    r--;
    long long res = 0;
    int rl = min(r, getblockright(l));
    res += bruteblock(l / BLOCK, l, rl, t);
    l = rl + 1;
    int lr = max(l, getblockleft(r));
    res += bruteblock(r / BLOCK, lr, r, t);
    r = lr;
    while (l < r) {
      if (sp[l / BLOCK]) {
        res += queryblock(l / BLOCK, t);
      } else {
        res += bruteblock(l / BLOCK, l, l + BLOCK - 1, t);
        sp[l / BLOCK] = 1;
        ltb[l / BLOCK] = t;
      }
      l += BLOCK;
    }
    printf("%lld\n", res);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n - 1; i++) {
    scanf("%d %d %d", &s[i], &m[i], &r[i]);
  }
  solve();
  return 0;
}
