#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long gi() {
  long long x = 0, o = 1;
  char ch = getchar();
  while (!isdigit(ch) && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int n, fa[N], x, y, z, st[N], tp = 0, p, ans, c[N], anc[N][20], rt[N];
vector<pair<int, int> > E[N];
long long mx = -1, dis[N], dep[N], l, dd[N];
vector<int> P;
bool in[N];
void dfs(int u, int ff, long long d) {
  fa[u] = ff;
  dis[u] = d;
  if (d > mx) mx = d, p = u;
  for (auto e : E[u])
    if (e.first != ff) dfs(e.first, u, d + e.second);
}
void dfs2(int u, int ff, int f, long long d) {
  dep[u] = d;
  anc[u][0] = f;
  P.push_back(u);
  for (int i = 1; i < 17; i++) anc[u][i] = anc[anc[u][i - 1]][i - 1];
  for (auto e : E[u])
    if (e.first != ff) dfs2(e.first, u, u, d + e.second);
}
void dfs3(int u, int ff) {
  for (auto e : E[u])
    if (e.first != ff) dfs3(e.first, u), c[u] += c[e.first];
}
int jump(int u) {
  long long lim = dep[u] - l;
  for (int i = 16; ~i; i--)
    if (anc[u][i] && dep[anc[u][i]] >= lim) u = anc[u][i];
  return u;
}
void work1(int u, int fa) {
  P.clear();
  dfs2(u, fa, 0, 0);
  memset(c, 0, sizeof(c));
  for (auto x : P) {
    int y = jump(x);
    ++c[x];
    if (anc[y][0]) --c[anc[y][0]];
  }
  dfs3(u, fa);
  for (auto x : P) ans = max(ans, c[x]);
}
void dfs4(int u, int ff, int x, long long d) {
  rt[u] = x;
  dd[u] = d;
  for (auto e : E[u])
    if (e.first != ff && !in[e.first]) dfs4(e.first, u, x, d + e.second);
}
int main() {
  cin >> n;
  for (int i = 1, u, v, w; i < n; i++)
    u = gi(), v = gi(), w = gi(), E[u].push_back(make_pair(v, w)),
    E[v].push_back(make_pair(u, w));
  dfs(1, 0, 0);
  x = p;
  mx = -1;
  dfs(x, 0, 0);
  y = p;
  for (int i = y; i; i = fa[i]) {
    in[st[++tp] = i] = 1;
    if (!z && mx - dis[i] <= dis[i] && mx - dis[fa[i]] >= dis[fa[i]]) z = i;
  }
  for (int i = 1; i <= tp; i++) dfs4(st[i], 0, st[i], 0);
  int q = gi();
  while (q--) {
    ans = 0;
    l = gi();
    work1(z, fa[z]);
    work1(fa[z], z);
    int sum = 0;
    long long mn = min(mx - dis[fa[z]], dis[z]);
    for (int i = 1; i <= n; i++)
      if (max(dis[rt[i]], mx - dis[rt[i]]) + dd[i] <= mn + l) ++sum;
    ans = max(ans, sum);
    cout << ans << '\n';
  }
  return 0;
}
