#include<bits/stdc++.h>
#define ll long long
#define f(i,a,b,n) for(int i=a;i<=b;i+=n)
#define ff(i,a,b,n) for(int i=a;i>=b;i-=n)
#define p(a,b) make_pair(a,b)
using namespace std;
int n,K,x,y,p;
ll dp[100005][25],f[100005][25];
vector<int> tree[100005];
void dfs(int k,int fa){
f(i,1,K,1) f[k][i]+=f[k][0];
f(i,0,tree[k].size()-1,1){
int v=tree[k][i];
if(v==fa) continue;
dfs(v,k);
f(j,1,K,1) f[k][j]+=f[v][j-1];
}
}
void finds(int k,int fa){
f(i,0,tree[k].size()-1,1){
int v=tree[k][i];
if(v==fa) continue;
dp[v][1]+=f[k][0];
f(i,2,K,1) dp[v][i]+=dp[k][i-1]-f[v][i-2];
finds(v,k);
}
}
int main(){
scanf("%d%d",&n,&K);
f(i,1,n-1,1){
scanf("%d%d",&x,&y);
tree[x].push_back(y);
tree[y].push_back(x);
}
f(i,1,n,1) scanf("%lld",&f[i][0]);
dfs(1,0);
memcpy(dp,f,sizeof(dp));
finds(1,0);
f(i,1,n,1) printf("%lld\n",dp[i][K]);
return 0;
}