#include<iostream>
#include<algorithm>
#define MAXN 10005
using namespace std;
struct node{
int v,next;
}E[MAXN<<2];
int H[MAXN],tot,k;
void add(int x,int y){
E[++tot].v=y;
E[tot].next=H[x];
H[x]=tot;
}
int F[MAXN][21],N,A[MAXN],depth[MAXN],j;
void dfs(int r){
for(int i=H[r];i;i=E[i].next)
if(!depth[E[i].v]){
depth[E[i].v]=depth[r]+1;
dfs(E[i].v);
for(int j=1;j<=k;j++)
F[r][j]+=F[E[i].v][j-1];
}
}
void dfs1(int r){
for(int i=H[r];i;i=E[i].next)
if(depth[E[i].v]>depth[r]){
for(int j=k;j>=2;j--)
F[E[i].v][j]-=F[E[i].v][j-2];
for(int j=1;j<=k;j++)
F[E[i].v][j]+=F[r][j-1];
dfs(E[i].v);
}
}
int main(){
cin>>N>>k;
for(int i=1,a,b;i<N;i++){
cin>>a>>b;
add(a,b);
add(b,a);
}
for(int i=1;i<=N;i++){
cin>>F[i][0];
}
depth[1]=1;
dfs(1);
dfs1(1);
for(int j=1;j<=N;j++){
int ans=0;
for(int i=0;i<=k;i++)ans+=F[j][i];
cout<<ans<<endl;
}
}