#include <bits/stdc++.h>
using i64 = long long;
const int N = 1e5+10;
i64 f[N][20];
int n, m, t, k;
i64 depth[N], dist[N];
std::vector<std::pair<i64, int>> g[N];
std::vector<int> a(N);
std::queue<std::pair<i64, int>> q;
void bfs() {
depth[1] = 1;
dist[1] = 0;
q.push({0, 1});
while (q.size()) {
auto h = q.front();q.pop();
for (auto e : g[h.second]) {
i64 w = e.first, v = e.second;
if (depth[v] != -1) continue;
depth[v] = depth[h.second] + 1;
dist[v] = dist[h.second] + w;
f[v][0] = h.second;
for (int i = 1; i <= t; i ++) {
f[v][i] = f[f[v][i-1]][i-1];
}
q.push(e);
}
}
}
int lca(int a, int b) {
if (depth[a] < depth[b]) std::swap(a, b);
for (int i = t; i >= 0; i --) {
if (depth[f[a][i]] >= depth[b]) {
a = f[a][i];
}
}
if (a == b) return b;
for (int i = t; i>= 0; i --) {
if (f[a][i] != f[b][i]) {
a = f[a][i];
b = f[b][i];
}
}
return f[a][0];
}
i64 getDist(int a, int b) {
return dist[a] + dist[b] - 2 * dist[lca(a, b)];
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
memset(depth, -1, sizeof depth);
std::cin >> n >> k;
t = (int)(std::log(n) / std::log(2)) + 1;
for (int i = 1; i <= n-1; i ++) {
i64 u, v, t;
std::cin >> u >> v >> t;
g[u].push_back({t, v});
g[v].push_back({t, u});
}
bfs();
i64 sum = 0;
for (int i = 1; i <= k; i ++) {
std::cin >> a[i];
if (i == 1) continue;
sum += getDist(a[i-1], a[i]);
}
i64 res;
for (int i = 1; i <= k; i ++) {
if (i == 1) {
res = sum - getDist(a[1], a[2]);
} else if (i == k) {
res = sum - getDist(a[k-1], a[k]);
} else {
res = sum - getDist(a[i-1], a[i]) - getDist(a[i], a[i+1]) + getDist(a[i-1], a[i+1]);
}
std::cout << res << " ";
}
}