//太好了,炜神只用了1.14514秒就完成了这题,我又双叒叕可以copyyyyyy了
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
typedef pair<db, db> pdd;
const int N = 2e5 + 10, M = 2 * N;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f;
const double PI = 3.141592653589793;
const int dx[] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dy[] = {1, 1, 1, 0, -1, -1, -1, 0};//奇数位置是上下左右
const int P = 998244353;
int T = 1;
ll primes[N], p_vis[N], p_cnt = 1;
ll fact[N];
void normalMath_init(){
fact[0] = 1;
for(int i = 1; i < N; i ++) fact[i] = fact[i - 1] * i % P;
p_vis[0] = p_vis[1] = -1;
for(int i = 2; i < N; i ++){
if(!p_vis[i]) primes[p_cnt ++] = i;
for(int j = 1; primes[j] * i < N; j ++){
p_vis[i * primes[j]] = 1;
if(i % primes[j] == 0) break;
}
}
}
ll qmi(ll a, ll b){
ll res = 1;
while(b){
if(b & 1) res = res * a % P;
b >>= 1;
a = a * a % P;
}
return res;
}
ll C(ll b, ll a){
return fact[b] * inv(fact[a]) % P * inv(fact[b - a]) % P;
}
ll gcd(ll a, ll b){
return b ? gcd(b, a % b) : a;
}
void solve(){
ll n, m;
cin >> n >> m;
vector<pll> g[n + 10];
for(int i = 1; i < n; i ++){
ll u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w}), g[v].push_back({u, w});
}
vector<ll> dep(n + 10), f(n + 10);
vector<vector<ll>> fa(n + 10, vector<ll>(25));
function<void(int, int)> dfs_pre = [&](int u, int pre) -> void{
dep[u] = dep[pre] + 1;
fa[u][0] = pre;
for(int i = 1; (1 << i) <= dep[u]; i ++){
fa[u][i] = fa[fa[u][i - 1]][i - 1];
}
for(auto son : g[u]){
ll v = son.fi, w = son.se;
if(v == pre) continue;
f[v] = f[u] + w;
dfs_pre(v, u);
}
};
function<ll(int, int)> lca = [&](int a, int b) -> ll{
if(dep[a] < dep[b]) swap(a, b);
for(int i = 20; i >= 0; i --){
if(dep[fa[a][i]] >= dep[b]) a = fa[a][i];
}
if(a == b){
return a;
}
for(int i = 20; i >= 0; i --){
if(fa[a][i] != fa[b][i]){
a = fa[a][i], b = fa[b][i];
}
}
return fa[a][0];
};
function<ll(int, int)> calc = [&](int a, int b) -> ll{
return f[a] + f[b] - 2 * f[lca(a, b)];
};
dfs_pre(1, 0);
vector<ll> q(m + 10);
for(int i = 1; i <= m; i ++) cin >> q[i];
ll ans = 0;
for(int i = 1; i < m; i ++){
ans += calc(q[i], q[i + 1]);
}
for(int i = 1; i <= m; i ++){
if(i == 1) cout << ans - calc(q[i], q[i + 1]) << ' ';
else if(i == m) cout << ans - calc(q[i], q[i - 1]) << ' ';
else{
ll tol = calc(q[i - 1], q[i + 1]) - calc(q[i], q[i - 1]) - calc(q[i], q[i + 1]);
cout << ans + tol << ' ';
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
normalMath_init();
//cin >> T;
while(T --){
solve();
}
return 0;
}