#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<int, pii> pipii;
typedef pair<pii, int> piipi;
typedef pair<pii, pii> piipii;

#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)(a).size()
#define eb emplace_back

vector<int> g[100005];
int n, k;
int a[100005];
int dp1[100005][45], dp2[100005][45];
void dfs1(int u, int p){
    dp1[u][0] = a[u];
    for(int i=0;i<g[u].size();i++){
        int v = g[u][i];
        if(v != p){
            dfs1(v, u);
            for(int j=0;j<2*k;j++) dp1[u][(j+1)%(2*k)] ^= dp1[v][j];
        }
    }
}
int ans[100005];
int tmp[45];
void dfs2(int u, int p){
    for(int j=0;j<2*k;j++) dp2[u][j] = dp1[u][j];
    if(p != 0){
        for(int j=0;j<2*k;j++) tmp[j] = dp2[p][j];
        for(int j=0;j<2*k;j++) tmp[(j+1)%(2*k)] ^= dp1[u][j];
        for(int j=0;j<2*k;j++) dp2[u][(j+1)%(2*k)] ^= tmp[j];
    }
    for(int j=k;j<2*k;j++) ans[u] ^= dp2[u][j];
    for(int i=0;i<sz(g[u]);i++){
        int v = g[u][i];
        if(v != p) dfs2(v, u);
    }
}
int main(){
    scanf("%d%d", &n, &k);
    for(int i=1;i<=n-1;i++){
        int a, b;
        scanf("%d%d", &a, &b);
        g[a].eb(b);
        g[b].eb(a);
    }
    for(int i=1;i<=n;i++){
        scanf("%d", &a[i]);
    }
    dfs1(1, 0);
    dfs2(1, 0);
    for(int i=1;i<=n;i++){
        if(ans[i] > 0) printf("1 ");
        else printf("0 ");
    }
}