#include <bits/stdc++.h>
using namespace std;
const int N = 300000;
const int mod = 1e9;
long long a[N * 20], b[N * 20], c[N * 20];
int ls[N * 20], rs[N * 20], top = 0;
void build(int l, int r, int& root, vector<int>& vec) {
  root = top++;
  if (l == r) {
    a[root] += vec[l - 1];
    return;
  }
  int m = (l + r) / 2;
  build(l, m, ls[root], vec);
  build(m + 1, r, rs[root], vec);
  a[root] = a[ls[root]] + a[rs[root]];
}
void update(int l, int r, int pre, int& root, int P, int op, int v1,
            int v2 = 0) {
  root = top++, ls[root] = ls[pre], rs[root] = rs[pre], a[root] = a[pre],
  b[root] = b[pre], c[root] = c[pre];
  if (l == r) {
    if (op == 1) {
      a[root] += v1;
    } else {
      b[root] += v1, c[root] += v2;
    }
    return;
  }
  int m = (l + r) / 2;
  if (P <= m)
    update(l, m, ls[pre], ls[root], P, op, v1, v2);
  else
    update(m + 1, r, rs[pre], rs[root], P, op, v1, v2);
  a[root] = a[ls[root]] + a[rs[root]];
  b[root] = b[ls[root]] + b[rs[root]];
  c[root] = c[ls[root]] + c[rs[root]];
}
void query(int l, int r, int& root, int L, int R, long long& x, long long& y,
           long long& z) {
  if (l >= L && r <= R) {
    x += a[root], y += b[root], z += c[root];
    return;
  }
  int m = (l + r) / 2;
  if (L <= m) query(l, m, ls[root], L, R, x, y, z);
  if (m + 1 <= R) query(m + 1, r, rs[root], L, R, x, y, z);
}
int main(int argc, char* argv[]) {
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  int n;
  cin >> n;
  vector<int> X1(n), X2(n), Y1(n), A(n), B(n), Y2(n);
  vector<int> root(200002);
  vector<vector<int>> op(200002);
  for (int i = 0; i < n; i++) {
    cin >> X1[i] >> X2[i] >> Y1[i] >> A[i] >> B[i] >> Y2[i];
    op[X1[i] + 1].push_back(i + 1);
    op[X2[i] + 1].push_back(-i - 1);
  }
  build(1, n, root[0], Y1);
  for (int i = 1; i <= 200001; i++) {
    root[i] = root[i - 1];
    for (auto x : op[i]) {
      if (x > 0) {
        update(1, n, root[i], root[i], x, 1, -Y1[x - 1]);
        update(1, n, root[i], root[i], x, 2, A[x - 1], B[x - 1]);
      } else {
        update(1, n, root[i], root[i], -x, 2, -A[-x - 1], -B[-x - 1]);
        update(1, n, root[i], root[i], -x, 1, Y2[-x - 1]);
      }
    }
  }
  int m;
  cin >> m;
  long long last = 0;
  while (m--) {
    int l, r, p;
    cin >> l >> r >> p;
    p = (p + last) % mod;
    p = min(p, 200001);
    long long x = 0, y = 0, z = 0;
    query(1, n, root[p], l, r, x, y, z);
    long long ans = x + y * p + z;
    last = ans;
    cout << ans << endl;
  }
  return 0;
}
