#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int n, root = 1, q, fen[MAXN], ans;
vector<pair<int, long long> > Mat[MAXN];
long long dis[MAXN], d1[MAXN];
vector<long long> R;
queue<int> B;
bool se[MAXN];
void add(int i) {
  for (i++; i < MAXN; i += i & (-i)) fen[i]++;
}
int get(int i) {
  int c = 0;
  for (i++; i > 0; i -= i & (-i)) c += fen[i];
  return c;
}
int getb(int l, int r) { return get(r - 1) - get(l - 1); }
void dfs(int v, int p, long long l) {
  int s = lower_bound(R.begin(), R.end(), dis[v]) - R.begin();
  int e = upper_bound(R.begin(), R.end(), dis[v] + l) - R.begin();
  int tmp = getb(s, e);
  for (int i = 0; i < Mat[v].size(); i++)
    if (Mat[v][i].first != p) dfs(Mat[v][i].first, v, l);
  ans = max(ans, 1 + getb(s, e) - tmp);
  add(s);
}
void BFS(int v) {
  for (int i = 0; i < Mat[v].size(); i++)
    if (!se[Mat[v][i].first]) {
      dis[Mat[v][i].first] = dis[v] + Mat[v][i].second;
      se[Mat[v][i].first] = 1;
      B.push(Mat[v][i].first);
    }
}
void prp() {
  fill_n(se, MAXN, 0);
  fill_n(dis, MAXN, 0);
}
void Sbfs(int v) {
  prp();
  B.push(v);
  se[v] = 1;
  while (!B.empty()) BFS(B.front()), B.pop();
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b, w;
    cin >> a >> b >> w;
    Mat[a].push_back({b, w});
    Mat[b].push_back({a, w});
  }
  Sbfs(1);
  int v = 1;
  for (int i = 1; i <= n; i++)
    if (dis[v] < dis[i]) v = i;
  Sbfs(v);
  int f = 1 + (1 == v);
  for (int i = 1; i <= n; i++)
    if (dis[f] < dis[i] && i != v) f = i;
  swap(d1, dis);
  Sbfs(f);
  for (int i = 1; i <= n; i++) {
    dis[i] = max(dis[i], d1[i]), R.push_back(dis[i]);
    if (dis[i] < dis[root]) root = i;
  }
  sort(R.begin(), R.end());
  R.resize(unique(R.begin(), R.end()) - R.begin());
  cin >> q;
  while (q--) {
    long long l;
    ans = 0;
    fill_n(fen, MAXN, 0);
    cin >> l;
    dfs(root, root, l);
    cout << ans << '\n';
  }
}
