#include <bits/stdc++.h>
using namespace std;
vector<int> p[80001], q[80001], v[80001];
int n, m, x, y, z, i, f[4001][4001], t, ans[20001], c[20001];
void update(int x, int y, int a, int b, int l, int r, int u) {
  if (x <= l && r <= y) {
    p[u].push_back(a);
    q[u].push_back(b);
    return;
  }
  int m = l + r >> 1;
  if (x <= m) update(x, y, a, b, l, m, u << 1);
  if (y > m) update(x, y, a, b, m + 1, r, u << 1 | 1);
}
void update(int x, int y, int l, int r, int u) {
  if (l == r) {
    v[u].push_back(y);
    return;
  }
  int m = l + r >> 1;
  if (x <= m)
    update(x, y, l, m, u << 1);
  else
    update(x, y, m + 1, r, u << 1 | 1);
}
void dfs(int l, int r, int u) {
  for (int i = 0; i < p[u].size(); i++) {
    int a = p[u][i], b = q[u][i];
    t++;
    memcpy(f[t], f[t - 1], sizeof f[t]);
    for (int j = 4000; j >= a; j--) f[t][j] = max(f[t][j], f[t - 1][j - a] + b);
  }
  if (l == r)
    for (int i = 0; i < v[u].size(); i++) ans[v[u][i]] = f[t][c[v[u][i]]];
  else {
    int m = l + r >> 1;
    dfs(l, m, u << 1);
    dfs(m + 1, r, u << 1 | 1);
  }
  t -= p[u].size();
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++)
    scanf("%d%d%d", &x, &y, &z), update(z, z + m - 1, x, y, 1, 20000, 1);
  scanf("%d", &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &c[i]);
    update(x, i, 1, 20000, 1);
  }
  dfs(1, 20000, 1);
  for (i = 1; i <= m; i++) printf("%d\n", ans[i]);
}
