#include<bits/stdc++.h>

using namespace std;

int read()
{
	int a=0,f=1,c=getchar();
	while(!isdigit(c))
	{
		if(c=='-')f=-1;
		c=getchar();
	}
	while(isdigit(c))
	{
		a=a*10+c-'0';
		c=getchar();
	}
	return a*f;
}

const int N=1e5+10;
const int K=40+10;

int n,k;
int a[N];
vector<int> e[N];

int fa[N],f[K][N];
void dfs1(int u)
{
	f[0][u]=a[u];
	for(int i=0;i<e[u].size();++i)
	{
		int v=e[u][i];
		if(v!=fa[u])
		{
			fa[v]=u;
			dfs1(v);
			for(int j=0;j<=2*k-1;++j)f[(j+1)%(2*k)][u]^=f[j][v];
		}
	}
}
int g[K][N];
void dfs2(int u)
{
	for(int i=0;i<e[u].size();++i)
	{
		int v=e[u][i];
		if(v!=fa[u])
		{
			for(int j=0;j<=2*k-1;++j)
			{
				g[(j+1)%(2*k)][v]=g[j][u]^f[j][u]^f[(j-1+2*k)%(2*k)][v];
//				printf("g[%d][%d]=%d\n",(j+1)%(2*k),v,g[(j+1)%(2*k)][v]);
			}
			dfs2(v);
		}
	}
}

int main()
{
//	freopen("1.in","r",stdin);
	
	n=read();
	k=read();
	for(int i=2;i<=n;++i)
	{
		int u=read();
		int v=read();
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=n;++i)a[i]=read();
	
	dfs1(1);
	dfs2(1);
	for(int i=1;i<=n;++i)
	{
		int ans=0;
		for(int j=k;j<=2*k-1;++j)ans^=f[j][i]^g[j][i];
		if(ans)printf("1 ");
		else printf("0 ");
	}
	puts("");
	
	return 0;
}
