#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define int long long
const int N = 5e4 + 10;
struct edge {
int v, w;
};
bool ok[N];
std::vector<edge> g[N];
int n, m, l = -1, r = 1e9, f[N][20], dep[N], s[N], a[N], b[N], need[N];
void init(int u, int fa, int sum) {
f[u][0] = fa, s[u] = sum, dep[u] = dep[fa] + 1;
for (int i = 1; i < 20; ++i)
f[u][i] = f[f[u][i - 1]][i - 1];
for (auto to : g[u])
if (to.v != fa) init(to.v, u, sum + to.w);
}
bool dfs(int u) {
if (ok[u]) return false;
if (g[u].size() == 1) return true;
for (auto to : g[u]) {
if (dep[to.v] < dep[u]) continue;
if (dfs(to.v)) return true;
}
return false;
}
bool check(int k) {
std::vector<std::pair<int, int>> q;
std::vector<int> p, dis;
memcpy(b, a, sizeof(b));
memset(need, false, sizeof(need));
memset(ok, false, sizeof(ok));
for (int i = 1; i <= m; ++i) {
int &u = b[i], t = k;
for (int j = 20; ~j; --j)
if (f[u][j] > 1 && s[u] - s[f[u][j]] <= t) t -= s[u] - s[f[u][j]], u = f[u][j];
if (dep[u] == 2 && s[u] < t) q.push_back({t - s[u], u});
else ok[u] = true;
}
std::sort(q.begin(), q.end());
for (auto to : g[1])
need[to.v] = dfs(to.v);
for (auto cur : q) {
if (need[cur.second] && cur.first < s[cur.second]) need[cur.second] = false;
else p.push_back(cur.first);
}
for (auto to : g[1])
if (need[to.v]) dis.emplace_back(s[to.v]);
if (p.size() < dis.size()) return false;
std::sort(p.begin(), p.end()), std::sort(dis.begin(), dis.end());
int pp = 0, disp = 0;
while (pp < p.size() && disp < dis.size()) {
if (p[pp] >= dis[disp]) ++pp, ++disp;
else ++pp;
}
return disp >= dis.size();
}
void print() {
puts("");
for (int i = 1; i <= n; ++i) printf("%2d", i);
puts("");
for (int i = 1; i <= n; ++i) printf("%2d", dep[i]);
puts("");
for (int i = 1; i < 20; ++i) printf("%3d", i);
puts("");
for (int i = 1; i <= n; ++i, puts(""))
for (int j = 0; j < 20; ++j)
printf("%3d", f[i][j]);
puts("");
}
signed main() {
std::cin >> n;
for (int i = 1, u, v, w; i < n; ++i) {
std::cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
dep[1] = 1, init(1, 0, 0);
std::cin >> m;
for (int i = 1; i <= m; ++i) std::cin >> a[i];
while (l + 1 != r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid;
}
std::cout << (r == 1e9 ? -1 : r) << std::endl;
return 0;
}