WA30/kk
#include<iostream>
#include<cstdio>
#include<vector>
#define debug(x) cout<<#x<<':'<<x<<endl
using namespace std;
inline int read(){
int x=0;short p=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') p=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x*p;
}
typedef long long ll;
const int N=1e5+5;
vector<int>e[N];
void add(int u,int v){
e[u].push_back(v);
e[v].push_back(u);
}
ll f[N][25];
int fa[N];
int n,k;
int v[N];
void dfs(int u){
f[u][0]+=v[u];
for(auto v:e[u]){
if(v==fa[u]) continue;
fa[v]=u;
dfs(v);
for(int i=1;i<=k;i++) f[u][i]+=f[v][i-1];
}
}
void solve(int u){
int cnt=k-1,tot=1;
ll ans=f[u][k];
while(fa[u]!=0&&cnt>=0){
ans+=f[fa[u]][cnt];
if(cnt-tot>=0) ans-=f[u][cnt-tot];
u=fa[u];
cnt--,tot++;
}
printf("%lld\n",ans);
}
int main() {
n=read(),k=read();
for(int i=1;i<n;i++) add(read(),read());
for(int i=1;i<=n;i++) v[i]=read();
dfs(1);
for(int u=1;u<=n;u++)
for(int i=1;i<=k;i++) f[u][i]+=f[u][i-1];
for(int i=1;i<=n;i++) solve(i);
}