#include <bits/stdc++.h>
#define S second
#define F first 
#define PB push_back
using namespace std;
int const N=1e6+1;
bool odw[N];
int PD[N],t[N];
long long DR[N], MA2[N];
pair<long long,int>MA1[N];
vector<pair<int,int>>g[N];

void dfs(int v){
	odw[v]=1;
	//cout<<v;
	for(pair<int,int> i:g[v]){
		if(odw[i.F]==0) {
			dfs(i.F);
		PD[v]+=PD[i.F];
		if(PD[i.F]!=0) DR[v]+=DR[i.F]+i.S;
		if(MA1[v].F<=MA1[i.F].F+i.S&&PD[i.F]!=0){
			MA2[v]=MA1[v].F;
			MA1[v].F=MA1[i.F].F+i.S;
			MA1[v].S=i.F;
		}
		else if(MA2[v]<MA1[i.F].F+i.S&&PD[i.F]!=0) MA2[v]=MA1[i.F].F+i.S;
	}
		//if(v==2) cout<<PD[v];
	}
}

void dfs2(int v){
	odw[v]=1;
	for(pair<int,int> i:g[v]){
		if(odw[i.F]==0){
			if(PD[i.F]!=PD[v]){
				DR[i.F]=DR[v];
				if(PD[i.F]==0) DR[i.F]+=i.S;
				if(MA1[v].S==i.F){
					if(MA2[v]+i.S>MA1[i.F].F){
						MA2[i.F]=MA1[i.F].F;
						MA1[i.F].F=MA2[v]+i.S;
						MA1[i.F].S=v;
					}
					else if(MA2[v]+i.S>MA2[i.F]) MA2[i.F]=MA2[v]+i.S;
				}
				else {
					if(MA1[v].F+i.S>MA1[i.F].F){
						MA2[i.F]=MA1[i.F].F;
						MA1[i.F].F=MA1[v].F+i.S;
						MA1[i.F].S=v;
					}
					else if(MA1[v].F+i.S>MA2[i.S]) MA2[i.S]=MA1[v].F+i.S;
				}
				
				PD[i.F]=PD[v];
				
			}
			t[i.F]=2*DR[i.F]-MA1[i.F].F;
			 dfs2(i.F);
			
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n,m,u,v,w;
	cin>>n>>m;
	for(int i=1;i<n;i++){
		cin>>u>>v>>w;
		g[u].PB({v,w});
		g[v].PB({u,w});
	}
	for(int i=0;i<m;i++){
		cin>>u;
		PD[u]++;
	}
	dfs(1);
	for(int i=1;i<=n;i++) odw[i]=0;
	t[1]=2*DR[1]-MA1[1].F;
	dfs2(1);
	for(int i=1;i<=n;i++) cout<<t[i]<<"\n";
	//cout<<2*DR[1]-MA1[1].F;
}