const int MAXN=5e5+5;
LL inf=1e15;
struct Edge{
int to,w,next;
}edge[MAXN<<1];
int head[MAXN],edge_cnt,k;
void Insert(int u,int v,int w){
edge[++edge_cnt]=Edge{v,w,head[u]};
head[u]=edge_cnt;
}
LL f[MAXN],dp[MAXN][3],ans[MAXN];
int sz[MAXN],hson[MAXN];
void dfs1(int u,int fa){
hson[u]=0;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(v==fa)continue;
dfs1(v,u);
sz[u]+=sz[v];
if(sz[v])f[u]+=f[v]+edge[i].w*2;
if(dp[v][0]+edge[i].w>dp[u][0]){
hson[u]=v;
dp[u][1]=dp[u][0];
dp[u][0]=dp[v][0]+edge[i].w;
}
else if(dp[v][0]+edge[i].w>dp[u][1])
dp[u][1]=dp[v][0]+edge[i].w;
}
}
void dfs2(int u,int fa){
ans[u]=f[u]-max(dp[u][0],dp[u][2]);
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(v==fa)continue;
if(sz[v]==0)
f[v]=f[u]+edge[i].w*2;
else if(sz[v]!=k)
f[v]=f[u];
if(v==hson[u])
dp[v][2]=edge[i].w+max(dp[u][1],dp[u][2]);
else
dp[v][2]=edge[i].w+max(dp[u][0],dp[u][2]);
dfs2(v,u);
}
}
int main()
{
int n=read_int();
k=read_int();
_for(i,1,n){
int u=read_int(),v=read_int(),w=read_int();
Insert(u,v,w);
Insert(v,u,w);
}
_rep(i,1,n)
dp[i][0]=dp[i][1]=dp[i][2]=-inf;
_for(i,0,k){
int u=read_int();
dp[u][0]=dp[u][1]=dp[u][2]=0;
sz[u]=1;
}
dfs1(1,0);
dfs2(1,0);
_rep(i,1,n)
enter(ans[i]);
return 0;
}