#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
inline long long rd() {
  long long x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * f;
}
int n, m;
struct node {
  long long s, a, b, rate;
  node() { s = a = b = rate = 0; }
  bool friend operator<(const node &a, const node &b) {
    return a.rate < b.rate;
  }
} p[20][N], x[N];
long long ans;
long long sa[20][N], sb[20][N], day[N << 2];
void build(int l, int r, int o, int d) {
  day[o] = -2;
  if (l == r) {
    p[d][l] = x[l];
    sa[d][l] = x[l].a + sa[d][l - 1];
    sb[d][l] = x[l].b + sb[d][l - 1];
    return;
  }
  int mid = (l + r) >> 1;
  build(l, mid, o << 1, d + 1);
  build(mid + 1, r, o << 1 | 1, d + 1);
  int i = l, j = mid + 1, cnt = l - 1;
  while (i <= mid && j <= r) {
    if (p[d + 1][i] < p[d + 1][j])
      p[d][++cnt] = p[d + 1][i++];
    else
      p[d][++cnt] = p[d + 1][j++];
  }
  while (i <= mid) p[d][++cnt] = p[d + 1][i++];
  while (j <= r) p[d][++cnt] = p[d + 1][j++];
  for (int i = l; i <= r; ++i) {
    sa[d][i] = sa[d][i - 1] + p[d][i].a;
    sb[d][i] = sb[d][i - 1] + p[d][i].b;
  }
}
void pushdown(int x) {
  if (day[x] < 0) return;
  day[x << 1] = day[x << 1 | 1] = day[x];
}
void query(int l, int r, int o, int a, int b, long long t, int d) {
  if (l > b || r < a) return;
  if (l >= a && r <= b && day[o] != -1) {
    if (day[o] == -2)
      for (int i = l; i <= r; ++i) ans += min(x[i].b, x[i].s + x[i].a * t);
    else {
      node w;
      w.rate = t - day[o];
      int i = upper_bound(p[d] + l, p[d] + r + 1, w) - p[d] - 1;
      ans += (t - day[o]) * (sa[d][r] - sa[d][i]) + sb[d][i] - sb[d][l - 1];
    }
    day[o] = t;
    return;
  }
  pushdown(o);
  int mid = (l + r) >> 1;
  query(l, mid, o << 1, a, b, t, d + 1);
  query(mid + 1, r, o << 1 | 1, a, b, t, d + 1);
  day[o] = day[o << 1] == day[o << 1 | 1] ? day[o << 1] : -1;
}
int main() {
  n = rd();
  for (int i = 1; i <= n; ++i) {
    x[i].s = rd();
    x[i].b = rd();
    x[i].a = rd();
    if (x[i].a == 0)
      x[i].rate = 1LL << 60;
    else
      x[i].rate = (x[i].b + x[i].a - 1) / x[i].a;
  }
  m = rd();
  build(1, n, 1, 0);
  while (m--) {
    long long t = rd(), l = rd(), r = rd();
    ans = 0;
    query(1, n, 1, l, r, t, 0);
    printf("%lld\n", ans);
  }
  return 0;
}
