#include <bits/stdc++.h>
/*
Chang ki si xuyen man dem
Di lac vao trong giac mong
*/
using namespace std;
using ll = long long;
#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second
const ll N = 5e5 + 5, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 19;
int n, q;
int h[N], a[N], b[N];
pii qry[N];
vector <int> add[N];
vector <int> del[N];
vector <pii> query[N];
struct ST {
int st[4 * N + 5], lz[4 * N + 5], res[4 * N + 5]; // st save max, lz save min
void reset() {
for (int i = 1; i < 4 * N; i++) {
st[i] = 0;
res[i] = 0;
lz[i] = inf;
}
}
void push(int i, int l, int r) {
st[i] = max(st[2 * i], st[2 * i + 1]);
res[i] = max(res[2 * i], res[2 * i + 1]);
}
void lazy(int i, int l, int r) {
lz[2 * i] = min(lz[2 * i], lz[i]);
lz[2 * i + 1] = min(lz[2 * i + 1], lz[i]);
res[2 * i] = max(res[2 * i], st[2 * i] - lz[2 * i]);
res[2 * i + 1] = max(res[2 * i + 1], st[2 * i + 1] - lz[2 * i + 1]);
lz[i] = inf;
}
void update(int i, int l, int r, int pos, int val) { // update i for j > i
if (l == r) {
st[i] = val;
return;
}
int mid = (l + r) / 2;
if (pos <= mid) update(2 * i, l, mid, pos, val);
else update(2 * i + 1, mid + 1, r, pos, val);
push(i, l, r);
}
void add(int i, int l, int r, int u, int v, int val) { // result for i
if (u > r || v < l) return;
if (u <= l && r <= v) {
res[i] = max(res[i], st[i] - val);
lz[i] = min(lz[i], val);
return;
}
int mid = (l + r) / 2;
lazy(i, l, r);
add(2 * i, l, mid, u, v, val);
add(2 * i + 1, mid + 1, r, u, v, val);
push(i, l, r);
}
int get(int i, int l, int r, int u, int v) {
if (u > r || v < l) return 0;
if (u <= l && r <= v) return res[i];
int mid = (l + r) / 2;
return max(get(2 * i, l, mid, u, v), get(2 * i + 1, mid + 1, r, u, v));
}
} st;
int ans[N];
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
if (fopen(".inp", "r")) {
freopen(".inp", "r", stdin);
freopen(".out", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> h[i] >> a[i] >> b[i];
}
cin >> q;
for (int i = 1; i <= q; i++) {
cin >> qry[i].fi >> qry[i].se;
ans[i] = -1;
}
for (int t = 0; t < 2; t++) {
for (int i = 1; i <= n; i++) {
add[i].clear(); del[i].clear();
}
for (int i = 1; i <= q; i++) {
query[i].clear();
}
for (int i = 1; i <= n; i++) {
add[i + a[i]].emplace_back(i);
del[i + b[i] + 1].emplace_back(i);
}
for (int i = 1; i <= q; i++) {
query[qry[i].se].emplace_back(qry[i].fi, i);
}
st.reset();
for (int i = 1; i <= n; i++) {
for (auto x : add[i]) {
st.update(1, 1, n, x, h[x]);
}
for (auto x : del[i]) {
st.update(1, 1, n, x, 0);
}
st.add(1, 1, n, max(1ll, i - b[i]), max(0ll, i - a[i]), h[i]);
for (auto [L, id] : query[i]) {
ans[id] = max(ans[id], st.get(1, 1, n, L, i));
}
}
reverse(h + 1, h + n + 1);
reverse(a + 1, a + n + 1);
reverse(b + 1, b + n + 1);
for (int i = 1; i <= n; i++) {
qry[i].fi = n - qry[i].fi + 1;
qry[i].se = n - qry[i].se + 1;
swap(qry[i].fi, qry[i].se);
}
}
for (int i = 1; i <= q; i++) cout << (ans[i] > 0 ? ans[i] : -1) << '\n';
return 0;
}