#include <bits/stdc++.h>
#define int long long
const int N = 1e6 + 10;
using namespace std;
int n,k,head[N],to[N],ne[N],id,dep[N],c[N],dp[N][22],ans;
void add(int x,int y){
to[++id] = y,ne[id] = head[x],head[x] = id;
}
void dfs(int u,int fa){
for(int i =head[u];i;i = ne[i]){
int v = to[i];
if(v == fa)
continue;
dfs(v,u);
for(int j = 1;j <= k;j++)
dp[u][j]+=dp[v][j-1];
}
}
void dfs2(int u,int fa){
for(int i = head[u];i;i = ne[i]){
int v = to[i];
if(v == fa)
continue;
for(int j = k;j >= 2;j--)
dp[v][j] -= dp[v][j-2];
for(int j = 1;j <= k;j++)
dp[v][j] += dp[u][j-1];
dfs2(v,u);
}
}
signed main(){
int n,k;
cin >> n >> k;
for(int i = 1,x,y;i < n;i++){
cin >> x >> y;
add(x,y),add(y,x);
}
for(int i = 1;i <= n;i++){
cin >> c[i];
dp[i][0] = c[i];
}
dfs(1,0);
dfs2(1,1);
for(int i = 1;i <= n;i++){
ans=0;
for(int j = 0;j <= k;j++)
ans += dp[i][j];
cout << ans << endl;
}
return 0;
}