#include <bits/stdc++.h>
using namespace std;
namespace cartesian {
struct node;
typedef node* treap;
struct node {
node *l = 0, *r = 0, *p = 0;
int64_t sum = 0, to_add = 0, val = 0;
int to_nul = 0, siz = 1;
int key, prior;
node(int key, int val): sum(val), val(val), key(key), prior(rand()) {}
#define safe(x, op) (x ? x->op : 0)
treap fix() {
safe(l, p = this);
safe(r, p = this);
sum = val + safe(l, sum) + safe(r, sum);
siz = 1 + safe(l, siz) + safe(r, siz);
return this;
}
treap cut_l() {
push();
safe(l, p = 0);
return l;
}
treap cut_r() {
push();
safe(r, p = 0);
return r;
}
treap set_l(treap x) {
l = x;
return fix();
}
treap set_r(treap x) {
r = x;
return fix();
}
treap nullify() {
to_nul = 1;
sum = to_add = val = 0;
return this;
}
treap add(int64_t k) {
to_add += k;
val += k;
sum += siz * k;
return this;
}
treap push() {
if(to_nul) {
safe(l, nullify());
safe(r, nullify());
to_nul = 0;
}
if(to_add) {
safe(l, add(to_add));
safe(r, add(to_add));
to_add = 0;
}
return this;
}
treap root() {
return p ? p->root() : this;
}
treap min() {
return l ? l->min() : this;
}
};
treap merge(treap a, treap b) {
if(!a || !b) {
return a ? a : b;
} else if(a->prior < b->prior) {
return a->set_r(merge(a->cut_r(), b));
} else {
return b->set_l(merge(a, b->cut_l()));
}
}
pair<treap, treap> split(treap a, int k) {
treap b, c;
if(!a) {
return {0, 0};
} else if(a->key < k) {
tie(b, c) = split(a->cut_r(), k);
return {a->set_r(b), c};
} else {
tie(b, c) = split(a->cut_l(), k);
return {b, a->set_l(c)};
}
}
pair<treap, treap> cut(treap a, int l, int r) {
treap b, c;
tie(a, b) = split(a, l);
tie(b, c) = split(b, r);
return {merge(a, c), b};
}
treap link(treap a, treap x) {
treap b;
tie(a, b) = split(a, x->min()->key);
return merge(a, merge(x, b));
}
pair<treap, treap> cut(treap x) {
return cut(x->root(), x->key, x->key + 1);
}
};
using namespace cartesian;
const int maxn = 5e5 + 42;
int to[maxn], a[maxn], in[maxn], out[maxn], par[maxn];
vector<int> g[maxn];
int sz, t;
string s;
treap nod[maxn];
void dfs(int v = 0, int p = 0) {
in[v] = t++;
nod[v] = new node(in[v], a[v]);
for(auto it: g[v]) {
int u = to[it];
if(u != p) {
par[u] = v;
dfs(u, v);
if(s[it / 2] == '0') {
merge(nod[v]->root(), nod[u]->root());
}
}
}
out[v] = t;
}
void inv(int u, int v) {
if(in[u] > in[v]) {
swap(u, v);
}
auto U = nod[u]->root();
auto V = nod[v]->root();
if(U != V) {
link(U, V);
} else {
cut(U, in[v], out[v]);
}
}
void add(int x, int c) {
nod[x]->root()->add(c);
}
void compose(int x) {
treap a, b;
tie(a, b) = cut(nod[x]);
b->add(safe(a, sum));
safe(a, nullify());
link(a, b);
}
int64_t get(int x) {
treap a, b;
tie(a, b) = cut(nod[x]);
int64_t res = b->sum;
link(a, b);
return res;
}
int64_t get_total(int x) {
return nod[x]->root()->sum;
}
void full_nul(int x) {
nod[x]->root()->nullify();
}
signed main() {
//freopen("input.txt", "r", stdin);
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n;
cin >> n >> m;
int u[n], v[n];
for(int i = 0; i < n - 1; i++) {
cin >> u[i] >> v[i];
u[i]--, v[i]--;
g[v[i]].push_back(sz);
to[sz++] = u[i];
g[u[i]].push_back(sz);
to[sz++] = v[i];
}
cin >> s;
for(int i = 0; i < n; i++) {
cin >> a[i];
}
dfs();
for(int i = 0; i < m; i++) {
int t;
cin >> t;
if(t == 1) {
int i;
cin >> i;
inv(u[i - 1], v[i - 1]);
} else if(t == 2) {
int x, c;
cin >> x >> c;
add(x - 1, c);
} else if(t == 3) {
int x;
cin >> x;
compose(x - 1);
} else if(t == 4) {
int x;
cin >> x;
cout << get(x - 1) << endl;
} else if(t == 5) {
int x;
cin >> x;
cout << get_total(x - 1) << endl;
} else if(t == 6) {
int x;
cin >> x;
full_nul(x - 1);
} else {
cout << 0 << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIGNhcnRlc2lhbiB7CgkKCXN0cnVjdCBub2RlOwoJdHlwZWRlZiBub2RlKiB0cmVhcDsKCQoJc3RydWN0IG5vZGUgewoJCW5vZGUgKmwgPSAwLCAqciA9IDAsICpwID0gMDsKCQlpbnQ2NF90IHN1bSA9IDAsIHRvX2FkZCA9IDAsIHZhbCA9IDA7CgkJaW50IHRvX251bCA9IDAsIHNpeiA9IDE7CgkJaW50IGtleSwgcHJpb3I7CgkJCgkJbm9kZShpbnQga2V5LCBpbnQgdmFsKTogc3VtKHZhbCksIHZhbCh2YWwpLCBrZXkoa2V5KSwgcHJpb3IocmFuZCgpKSB7fQoJCQoJCQoJCSNkZWZpbmUgc2FmZSh4LCBvcCkgKHggPyB4LT5vcCA6IDApCgkJCgkJdHJlYXAgZml4KCkgewoJCQlzYWZlKGwsIHAgPSB0aGlzKTsKCQkJc2FmZShyLCBwID0gdGhpcyk7CgkJCXN1bSA9IHZhbCArIHNhZmUobCwgc3VtKSArIHNhZmUociwgc3VtKTsKCQkJc2l6ID0gMSArIHNhZmUobCwgc2l6KSArIHNhZmUociwgc2l6KTsKCQkJcmV0dXJuIHRoaXM7CgkJfQoJCXRyZWFwIGN1dF9sKCkgewoJCQlwdXNoKCk7CgkJCXNhZmUobCwgcCA9IDApOwoJCQlyZXR1cm4gbDsKCQl9CgkJdHJlYXAgY3V0X3IoKSB7CgkJCXB1c2goKTsKCQkJc2FmZShyLCBwID0gMCk7CgkJCXJldHVybiByOwoJCX0KCQl0cmVhcCBzZXRfbCh0cmVhcCB4KSB7CgkJCWwgPSB4OwoJCQlyZXR1cm4gZml4KCk7CgkJfQoJCXRyZWFwIHNldF9yKHRyZWFwIHgpIHsKCQkJciA9IHg7CgkJCXJldHVybiBmaXgoKTsKCQl9CgkJCgkJdHJlYXAgbnVsbGlmeSgpIHsKCQkJdG9fbnVsID0gMTsKCQkJc3VtID0gdG9fYWRkID0gdmFsID0gMDsKCQkJcmV0dXJuIHRoaXM7CgkJfQoJCXRyZWFwIGFkZChpbnQ2NF90IGspIHsKCQkJdG9fYWRkICs9IGs7CgkJCXZhbCArPSBrOwoJCQlzdW0gKz0gc2l6ICogazsKCQkJcmV0dXJuIHRoaXM7CgkJfQoJCQoJCXRyZWFwIHB1c2goKSB7CgkJCWlmKHRvX251bCkgewoJCQkJc2FmZShsLCBudWxsaWZ5KCkpOwoJCQkJc2FmZShyLCBudWxsaWZ5KCkpOwoJCQkJdG9fbnVsID0gMDsKCQkJfQoJCQlpZih0b19hZGQpIHsKCQkJCXNhZmUobCwgYWRkKHRvX2FkZCkpOwoJCQkJc2FmZShyLCBhZGQodG9fYWRkKSk7CgkJCQl0b19hZGQgPSAwOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0JCQoJCXRyZWFwIHJvb3QoKSB7CgkJCXJldHVybiBwID8gcC0+cm9vdCgpIDogdGhpczsKCQl9CgkJdHJlYXAgbWluKCkgewoJCQlyZXR1cm4gbCA/IGwtPm1pbigpIDogdGhpczsKCQl9Cgl9OwoJdHJlYXAgbWVyZ2UodHJlYXAgYSwgdHJlYXAgYikgewoJCWlmKCFhIHx8ICFiKSB7CgkJCXJldHVybiBhID8gYSA6IGI7CgkJfSBlbHNlIGlmKGEtPnByaW9yIDwgYi0+cHJpb3IpIHsKCQkJcmV0dXJuIGEtPnNldF9yKG1lcmdlKGEtPmN1dF9yKCksIGIpKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gYi0+c2V0X2wobWVyZ2UoYSwgYi0+Y3V0X2woKSkpOwoJCX0KCX0KCXBhaXI8dHJlYXAsIHRyZWFwPiBzcGxpdCh0cmVhcCBhLCBpbnQgaykgewoJCXRyZWFwIGIsIGM7CgkJaWYoIWEpIHsKCQkJcmV0dXJuIHswLCAwfTsKCQl9IGVsc2UgaWYoYS0+a2V5IDwgaykgewoJCQl0aWUoYiwgYykgPSBzcGxpdChhLT5jdXRfcigpLCBrKTsKCQkJcmV0dXJuIHthLT5zZXRfcihiKSwgY307CgkJfSBlbHNlIHsKCQkJdGllKGIsIGMpID0gc3BsaXQoYS0+Y3V0X2woKSwgayk7CgkJCXJldHVybiB7YiwgYS0+c2V0X2woYyl9OwoJCX0KCX0KCXBhaXI8dHJlYXAsIHRyZWFwPiBjdXQodHJlYXAgYSwgaW50IGwsIGludCByKSB7CgkJdHJlYXAgYiwgYzsKCQl0aWUoYSwgYikgPSBzcGxpdChhLCBsKTsKCQl0aWUoYiwgYykgPSBzcGxpdChiLCByKTsKCQlyZXR1cm4ge21lcmdlKGEsIGMpLCBifTsKCX0KCXRyZWFwIGxpbmsodHJlYXAgYSwgdHJlYXAgeCkgewoJCXRyZWFwIGI7CgkJdGllKGEsIGIpID0gc3BsaXQoYSwgeC0+bWluKCktPmtleSk7CgkJcmV0dXJuIG1lcmdlKGEsIG1lcmdlKHgsIGIpKTsKCX0KCXBhaXI8dHJlYXAsIHRyZWFwPiBjdXQodHJlYXAgeCkgewoJCXJldHVybiBjdXQoeC0+cm9vdCgpLCB4LT5rZXksIHgtPmtleSArIDEpOwoJfQp9OwoKdXNpbmcgbmFtZXNwYWNlIGNhcnRlc2lhbjsKCmNvbnN0IGludCBtYXhuID0gNWU1ICsgNDI7CgppbnQgdG9bbWF4bl0sIGFbbWF4bl0sIGluW21heG5dLCBvdXRbbWF4bl0sIHBhclttYXhuXTsKdmVjdG9yPGludD4gZ1ttYXhuXTsKaW50IHN6LCB0OwpzdHJpbmcgczsKCnRyZWFwIG5vZFttYXhuXTsKCnZvaWQgZGZzKGludCB2ID0gMCwgaW50IHAgPSAwKSB7Cglpblt2XSA9IHQrKzsKCW5vZFt2XSA9IG5ldyBub2RlKGluW3ZdLCBhW3ZdKTsKCWZvcihhdXRvIGl0OiBnW3ZdKSB7CgkJaW50IHUgPSB0b1tpdF07CgkJaWYodSAhPSBwKSB7CgkJCXBhclt1XSA9IHY7CgkJCWRmcyh1LCB2KTsKCQkJaWYoc1tpdCAvIDJdID09ICcwJykgewoJCQkJbWVyZ2Uobm9kW3ZdLT5yb290KCksIG5vZFt1XS0+cm9vdCgpKTsKCQkJfQoJCX0KCX0KCW91dFt2XSA9IHQ7Cn0KCnZvaWQgaW52KGludCB1LCBpbnQgdikgewoJaWYoaW5bdV0gPiBpblt2XSkgewoJCXN3YXAodSwgdik7Cgl9CglhdXRvIFUgPSBub2RbdV0tPnJvb3QoKTsKCWF1dG8gViA9IG5vZFt2XS0+cm9vdCgpOwoJaWYoVSAhPSBWKSB7CgkJbGluayhVLCBWKTsKCX0gZWxzZSB7CgkJY3V0KFUsIGluW3ZdLCBvdXRbdl0pOwoJfQp9CnZvaWQgYWRkKGludCB4LCBpbnQgYykgewoJbm9kW3hdLT5yb290KCktPmFkZChjKTsKfQp2b2lkIGNvbXBvc2UoaW50IHgpIHsKCXRyZWFwIGEsIGI7Cgl0aWUoYSwgYikgPSBjdXQobm9kW3hdKTsKCWItPmFkZChzYWZlKGEsIHN1bSkpOwoJc2FmZShhLCBudWxsaWZ5KCkpOwoJbGluayhhLCBiKTsKfQppbnQ2NF90IGdldChpbnQgeCkgewoJdHJlYXAgYSwgYjsKCXRpZShhLCBiKSA9IGN1dChub2RbeF0pOwoJaW50NjRfdCByZXMgPSBiLT5zdW07CglsaW5rKGEsIGIpOwoJcmV0dXJuIHJlczsKfQppbnQ2NF90IGdldF90b3RhbChpbnQgeCkgewoJcmV0dXJuIG5vZFt4XS0+cm9vdCgpLT5zdW07Cn0Kdm9pZCBmdWxsX251bChpbnQgeCkgewoJbm9kW3hdLT5yb290KCktPm51bGxpZnkoKTsKfQoKCnNpZ25lZCBtYWluKCkgewoJLy9mcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWludCBuLCBtOwoJY2luID4+IG47CgljaW4gPj4gbiA+PiBtOwoJaW50IHVbbl0sIHZbbl07Cglmb3IoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewoJCWNpbiA+PiB1W2ldID4+IHZbaV07CgkJdVtpXS0tLCB2W2ldLS07CgkJZ1t2W2ldXS5wdXNoX2JhY2soc3opOwoJCXRvW3N6KytdID0gdVtpXTsKCQlnW3VbaV1dLnB1c2hfYmFjayhzeik7CgkJdG9bc3orK10gPSB2W2ldOwoJfQoJY2luID4+IHM7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJY2luID4+IGFbaV07Cgl9CglkZnMoKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKCQlpbnQgdDsKCQljaW4gPj4gdDsKCQlpZih0ID09IDEpIHsKCQkJaW50IGk7CgkJCWNpbiA+PiBpOwoJCQlpbnYodVtpIC0gMV0sIHZbaSAtIDFdKTsKCQl9IGVsc2UgaWYodCA9PSAyKSB7CgkJCWludCB4LCBjOwoJCQljaW4gPj4geCA+PiBjOwoJCQlhZGQoeCAtIDEsIGMpOwoJCX0gZWxzZSBpZih0ID09IDMpIHsKCQkJaW50IHg7CgkJCWNpbiA+PiB4OwoJCQljb21wb3NlKHggLSAxKTsKCQl9IGVsc2UgaWYodCA9PSA0KSB7CgkJCWludCB4OwoJCQljaW4gPj4geDsKCQkJY291dCA8PCBnZXQoeCAtIDEpIDw8IGVuZGw7CgkJfSBlbHNlIGlmKHQgPT0gNSkgewoJCQlpbnQgeDsKCQkJY2luID4+IHg7CgkJCWNvdXQgPDwgZ2V0X3RvdGFsKHggLSAxKSA8PCBlbmRsOwoJCX0gZWxzZSBpZih0ID09IDYpIHsKCQkJaW50IHg7CgkJCWNpbiA+PiB4OwoJCQlmdWxsX251bCh4IC0gMSk7CgkJfSBlbHNlIHsKCQkJY291dCA8PCAwIDw8IGVuZGw7CgkJfQoJfQoJcmV0dXJuIDA7Cn0=