#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int SIZE = 1e6 + 10;
const int INF = 2147483647;
template <class T>
void maa(T& x, T y) {
  if (x < y) x = y;
}
template <class T>
void mii(T& x, T y) {
  if (x > y) x = y;
}
int a[SIZE];
int record[SIZE][3], rn;
void update_answer(int ll, int rr, int cul) {
  record[rn][0] = ll;
  record[rn][1] = rr;
  record[rn][2] = cul;
  rn++;
}
int C, l[SIZE], r[SIZE], c[SIZE], cn, cc_pos[SIZE];
pair<int, int> cc[SIZE];
vector<pair<int, int> > qq;
int single_add[SIZE];
int kerker[SIZE];
set<pair<int, int> > singles;
pair<int, int> BIT[SIZE][2];
void ins(int x, int v) {
  pair<int, int> me = make_pair(v, x);
  for (; x < SIZE; x += x & -x) {
    if (me > BIT[x][0]) {
      if (BIT[x][0].second != me.second) {
        BIT[x][1] = BIT[x][0];
      }
      BIT[x][0] = me;
    } else if (me > BIT[x][1]) {
      BIT[x][1] = me;
    }
  }
}
int qq_BIT(int x, int id) {
  int res = 0;
  for (; x; x -= x & -x) {
    if (BIT[x][0].second != id)
      res = max(res, BIT[x][0].first);
    else
      res = max(res, BIT[x][1].first);
  }
  return res;
}
void update_single(int id, int v) {
  single_add[id] += v;
  ins(cc_pos[id], single_add[id]);
}
int get_single_ma(int id) {
  int it = upper_bound(cc + 1, cc + cn, make_pair(C - c[id], INF)) - cc - 1;
  if (it) {
    return qq_BIT(it, cc_pos[id]);
  }
  return 0;
}
pair<int, int> GP(int x, int y) {
  if (x > y) return make_pair(y, x);
  return make_pair(x, y);
}
int an[SIZE];
int main() {
  int n;
  scanf("%d%d", &(n), &(C));
  vector<pair<int, int> > rain;
  cn = 1;
  for (int i = (1); i < (n + 1); ++i) {
    scanf("%d%d%d", &(l[i]), &(r[i]), &(c[i]));
    rain.push_back(make_pair(l[i], i));
    rain.push_back(make_pair(r[i], -i));
    cc[cn++] = make_pair(c[i], i);
  }
  sort(cc + 1, cc + cn);
  for (int i = (1); i < (cn); ++i) cc_pos[cc[i].second] = i;
  sort((rain).begin(), (rain).end());
  rain.push_back(make_pair(2000000000, 0));
  int(m);
  scanf("%d", &m);
  for (int i = 0; i < (m); ++i) {
    int(x);
    scanf("%d", &x);
    qq.push_back(make_pair(x, i));
  }
  sort((qq).begin(), (qq).end());
  map<pair<int, int>, int> pair_add;
  set<int> now;
  int zero = 0;
  int pair_ma = 0;
  if (rain[0].first) {
    update_answer(0, rain[0].first, 0);
    zero += rain[0].first;
  }
  for (int i = 0, j; i < 2 * n; i = j) {
    for (j = i; j < 2 * n && rain[j].first == rain[i].first; j++) {
      int id = rain[j].second;
      if (id < 0) {
        now.erase(-id);
      } else {
        now.insert(id);
      }
    }
    if (((int)(now).size()) == 0) {
      update_answer(rain[i].first, rain[j].first,
                    zero + max(pair_ma, get_single_ma(0)));
      zero += rain[j].first - rain[i].first;
    } else if (((int)(now).size()) == 1) {
      int me = *now.begin();
      if (c[me] <= C) {
        int v = single_add[me] + max(get_single_ma(me), kerker[me]);
        update_answer(rain[i].first, rain[j].first, zero + v);
        update_single(me, rain[j].first - rain[i].first);
        maa(pair_ma, v + rain[j].first - rain[i].first);
      }
    } else if (((int)(now).size()) == 2) {
      int me = *now.begin();
      int you = *now.rbegin();
      if (c[me] + c[you] <= C) {
        update_answer(
            rain[i].first, rain[j].first,
            zero + single_add[me] + single_add[you] + pair_add[GP(me, you)]);
        pair_add[GP(me, you)] += rain[j].first - rain[i].first;
        maa(pair_ma, single_add[me] + single_add[you] + pair_add[GP(me, you)]);
        maa(kerker[me], pair_add[GP(me, you)] + single_add[you]);
        maa(kerker[you], pair_add[GP(me, you)] + single_add[me]);
      }
    }
  }
  {
    int it = 0;
    for (int i = 0; i < (rn); ++i) {
      while (it < m &&
             record[i][1] - record[i][0] + record[i][2] >= qq[it].first) {
        an[qq[it].second] = record[i][0] + (qq[it].first - record[i][2]);
        it++;
      }
    }
  }
  for (int i = 0; i < (m); ++i) printf("%d\n", an[i]);
  return 0;
}
