#include <bits/stdc++.h>
using namespace std;
int read() {
  int s = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
  return s * w;
}
int max(int x, int y) { return x > y ? x : y; }
struct Cloud {
  int l, r, c, id;
  Cloud(int r_l = 0, int r_r = 0, int r_c = 0, int r_id = 0) {
    l = r_l, r = r_r, c = r_c, id = r_id;
  }
} clo[300005];
bool cmp1(Cloud c1, Cloud c2) { return c1.c < c2.c; }
struct query {
  int k, id;
} q[300005];
bool cmp2(query q1, query q2) { return q1.k < q2.k; }
struct node {
  int t, tp, id;
  node(int r_t = 0, int r_tp = 0, int r_id = 0) {
    t = r_t, tp = r_tp, id = r_id;
  }
} p[300005 * 2];
bool cmp3(node p1, node p2) { return p1.t < p2.t; }
int cnt;
int n, m, C;
int ans[300005];
set<int> s;
set<int>::iterator its;
int len1[300005];
map<int, int> len2[300005];
int mx[300005];
struct segment_tree {
  int mx, p;
} t[300005 * 4], tol;
segment_tree merge(segment_tree t1, segment_tree t2) {
  tol.mx = max(t1.mx, t2.mx);
  if (t1.mx > t2.mx)
    tol.p = t1.p;
  else
    tol.p = t2.p;
  return tol;
}
void build(int p, int l, int r) {
  if (l == r) {
    t[p].mx = len1[l], t[p].p = l;
    return;
  }
  int mid = (l + r) >> 1;
  build((p << 1), l, mid);
  build((p << 1 | 1), mid + 1, r);
  t[p] = merge(t[(p << 1)], t[(p << 1 | 1)]);
}
void change(int p, int l, int r, int x, int k) {
  if (l == r) {
    t[p].mx += k;
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    change((p << 1), l, mid, x, k);
  else
    change((p << 1 | 1), mid + 1, r, x, k);
  t[p] = merge(t[(p << 1)], t[(p << 1 | 1)]);
}
segment_tree ask(int p, int l, int r, int x, int y) {
  if (x <= l && r <= y) return t[p];
  int mid = (l + r) >> 1;
  segment_tree ans;
  ans.mx = -1, ans.p = 0;
  if (x <= mid) ans = merge(ans, ask((p << 1), l, mid, x, y));
  if (y > mid) ans = merge(ans, ask((p << 1 | 1), mid + 1, r, x, y));
  return ans;
}
int calc(int x, int y) { return len1[x] + len1[y] + len2[x][y]; }
int twofen(int lim) {
  int l = 1, r = n, mid, ans = 0;
  do {
    mid = (l + r) >> 1;
    if (clo[mid].c <= lim)
      ans = mid, l = mid + 1;
    else
      r = mid - 1;
  } while (l <= r);
  return ans;
}
void work() {
  if (!n)
    for (int i = 1; i <= m; i++) ans[q[i].id] = q[i].k;
  else {
    build(1, 1, n);
    for (int i = 1, last = 0, sum = 0, sum2 = 0, j = 1; i <= cnt; i++) {
      int L = p[i].t - last, T = p[i].t;
      last = p[i].t;
      if (!s.size())
        sum += L;
      else if (s.size() == 1) {
        int x = *s.begin();
        len1[x] += L, mx[x] += L, change(1, 1, n, x, L);
        if (clo[x].c <= C) {
          int l = 1, r = twofen(C - clo[x].c), val = 0;
          if (l <= x && x <= r) {
            if (1 <= x - 1) val = max(val, calc(x, ask(1, 1, n, 1, x - 1).p));
            if (x + 1 <= r) val = max(val, calc(x, ask(1, 1, n, x + 1, r).p));
          } else if (l <= r)
            val = max(val, calc(x, ask(1, 1, n, l, r).p));
          mx[x] = max(mx[x], val);
          sum2 = max(sum2, mx[x]);
        }
      } else if (s.size() == 2) {
        its = s.begin();
        int x = *its, y;
        its++;
        y = *its;
        len2[x][y] += L, len2[y][x] += L;
        if (clo[x].c + clo[y].c <= C) {
          mx[x] = max(mx[x], calc(x, y));
          mx[y] = max(mx[y], calc(x, y));
          sum2 = max(sum2, max(mx[x], mx[y]));
        }
      }
      while (j <= m && sum2 + sum >= q[j].k)
        ans[q[j].id] = q[j].k + (T - sum2 - sum), j++;
      if (p[i].tp == 1)
        s.insert(p[i].id);
      else
        s.erase(p[i].id);
    }
  }
  for (int i = 1; i <= m; i++) cout << ans[i] << '\n';
}
int main() {
  n = read();
  C = read();
  for (int i = 1; i <= n; i++) {
    clo[i].l = read();
    clo[i].r = read();
    clo[i].c = read();
  }
  sort(clo + 1, clo + n + 1, cmp1);
  for (int i = 1; i <= n; i++) clo[i].id = i;
  for (int i = 1; i <= n; i++)
    p[++cnt] = node(clo[i].l, 1, i), p[++cnt] = node(clo[i].r, -1, i);
  p[++cnt] = node(2e9, 1, n + 1);
  sort(p + 1, p + cnt + 1, cmp3);
  m = read();
  for (int i = 1; i <= m; i++) {
    q[i].k = read();
    q[i].id = i;
  }
  sort(q + 1, q + m + 1, cmp2);
  work();
  return 0;
}
