#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<array<ll, 2>> diff;
map<ll, ll> ans;
vector<array<ll, 3>> edge;
long long cnt = 0;
struct dsu {
vector<int> p, sz;
vector<array<ll, 2>> sm;
dsu(int n, vector<ll> vl) {
for (int i = 0; i < n; i++)
sm.push_back({vl[i], vl[i]});
n++;
p.assign(n, 0);
sz.assign(n, 1);
iota(p.begin(), p.end(), 0);
}
int find(int u) {
if (u == p[u])
return u;
return p[u] = find(p[u]);
}
void connect(int u, int v) {
u = find(u);
v = find(v);
if (u == v)
return;
cnt -= sm[u][0] + sm[v][0];
if (sz[u] % 2)
cnt += sm[u][1];
if (sz[v] % 2)
cnt += sm[v][1];
sz[v] += sz[u];
p[u] = v;
sm[v][0] += sm[u][0];
sm[v][1] = min(sm[u][1], sm[v][1]);
cnt += sm[v][0];
if (sz[v] % 2)
cnt -= sm[v][1];
}
};
vector<long long> calculate_costs(vector<int> w, vector<int> a,vector<int> b, vector<int> e) {
int n = w.size(),q = e.size();
vector<long long> org;
for (int i = 0; i < q; i++)
org.push_back(e[i]);
sort(e.begin(), e.end());
ll fl = 0;
vector<ll> tmp;
for (int i = 0; i < n; i++) {
fl += a[i];
diff.push_back({w[i], a[i] - b[i]});
}
sort(diff.begin(), diff.end());
for (int i = 0; i < n - 1; i++) {
edge.push_back({diff[i + 1][0] - diff[i][0], i, i + 1});
}
for (int i = 0; i < n; i++)
tmp.push_back(diff[i][1]);
dsu ds(n, tmp);
sort(edge.begin(), edge.end());
int nw = 0;
for (int i = 0; i < q; i++) {
while (nw < n - 1 && e[i] >= edge[nw][0]) {
ds.connect(edge[nw][1], edge[nw][2]);
nw++;
}
ans[e[i]] = fl - cnt;
}
for (auto &i : org)
i = ans[i];
return org;
}
#include "nile.h"
// int main() {int N;assert(1 == scanf("%d", &N));std::vector<int> W(N), A(N), B(N);for (int i = 0; i < N; i++)assert(3 == scanf("%d%d%d", &W[i], &A[i], &B[i]));int Q;assert(1 == scanf("%d", &Q));std::vector<int> E(Q);for (int j = 0; j < Q; j++)assert(1 == scanf("%d", &E[j]));fclose(stdin);std::vector<long long> R = calculate_costs(W, A, B, E);int S = (int)R.size();for (int j = 0; j < S; j++)printf("%lld\n", R[j]);fclose(stdout);}