// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "gen"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 200000 + 5;
const int S = 350;
int n, m, q, a[N];
vector<int> G[N];
int pos[N], timer = 0, h[N], minHigh[N << 1][20], tour[N << 1];
void dfs(int u, int par) {
pos[u] = ++timer;
tour[timer] = u;
for(int v : G[u]) if (v != par) {
h[v] = h[u] + 1;
dfs(v, u);
tour[++timer] = u;
}
}
#define MIN_HIGH(x, y) (h[x] < h[y] ? x : y)
int LCA(int u, int v) {
int l = pos[u], r = pos[v];
if (l > r) swap(l, r);
int k = __lg(r - l + 1);
return MIN_HIGH(minHigh[l][k], minHigh[r - MASK(k) + 1][k]);
}
int dist(int u, int v) {
int p = LCA(u, v);
return h[u] + h[v] - 2 * h[p];
}
ll lazy_add[N / S + 5];
int lazy_set[N / S + 5], first_set[N / S + 5];
ll ans[N], val[N / S + 5][N], old[N];
void rebuild(int B) {
if (lazy_set[B] == 0) return;
FOR(i, B * S, (B + 1) * S - 1) {
ans[i] += val[B][a[i]] - old[i] - dist(a[i], first_set[B]);
a[i] = lazy_set[B];
old[i] = val[B][a[i]];
}
first_set[B] = -1;
lazy_set[B] = 0;
}
void init(void) {
cin >> n >> m >> q;
REP(i, m) cin >> a[i];
FOR(i, 2, n) {
int u, v;
cin >> u >> v;
G[u].pb(v);
G[v].pb(u);
}
}
void process(void) {
dfs(1, -1);
FOR(i, 1, timer) minHigh[i][0] = tour[i];
FOR(j, 1, 19) FOR(i, 1, timer - MASK(j) + 1)
minHigh[i][j] = MIN_HIGH(minHigh[i][j - 1], minHigh[i + MASK(j - 1)][j - 1]);
memset(first_set, -1, sizeof first_set);
while(q--) {
int type;
cin >> type;
if (type == 1) {
int u, v;
cin >> u >> v;
FOR(B, 0, m / S)
if (lazy_set[B] == u)
lazy_add[B] += v;
else if (lazy_set[B] == 0)
val[B][u] += v;
} else if (type == 2) {
int l, r, z;
cin >> l >> r >> z;
l--; r--;
if (l / S == r / S) {
rebuild(l / S);
FOR(i, l, r) {
ans[i] += val[l / S][a[i]] - old[i] - dist(a[i], z);
a[i] = z;
old[i] = val[l / S][z];
}
continue;
}
rebuild(l / S);
rebuild(r / S);
FOR(i, l, (l / S + 1) * S - 1) {
ans[i] += val[l / S][a[i]] - old[i] - dist(a[i], z);
a[i] = z;
old[i] = val[l / S][z];
}
FOR(i, (r / S) * S, r) {
ans[i] += val[r / S][a[i]] - old[i] - dist(a[i], z);
a[i] = z;
old[i] = val[r / S][z];
}
FOR(i, l / S + 1, r / S - 1) {
if (first_set[i] == -1)
first_set[i] = z;
if (lazy_set[i] > 0) lazy_add[i] -= dist(lazy_set[i], z);
lazy_set[i] = z;
}
} else {
int u; cin >> u;
u--;
rebuild(u / S);
cout << ans[u] + lazy_add[u / S] + val[u / S][a[u]] - old[u] << '\n';
}
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJnZW4iCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IDFlOSArIDI3MDkyMDA4Owpjb25zdCBsbCBJTkYgPSAxZTE4ICsgMjcwOTIwMDg7CmNvbnN0IGludCBOID0gMjAwMDAwICsgNTsKY29uc3QgaW50IFMgPSAzNTA7CmludCBuLCBtLCBxLCBhW05dOwp2ZWN0b3I8aW50PiBHW05dOwppbnQgcG9zW05dLCB0aW1lciA9IDAsIGhbTl0sIG1pbkhpZ2hbTiA8PCAxXVsyMF0sIHRvdXJbTiA8PCAxXTsKCnZvaWQgZGZzKGludCB1LCBpbnQgcGFyKSB7CiAgICBwb3NbdV0gPSArK3RpbWVyOwogICAgdG91clt0aW1lcl0gPSB1OwogICAgZm9yKGludCB2IDogR1t1XSkgaWYgKHYgIT0gcGFyKSB7CiAgICAgICAgaFt2XSA9IGhbdV0gKyAxOwogICAgICAgIGRmcyh2LCB1KTsKICAgICAgICB0b3VyWysrdGltZXJdID0gdTsKICAgIH0KfQoKI2RlZmluZSBNSU5fSElHSCh4LCB5KSAoaFt4XSA8IGhbeV0gPyB4IDogeSkKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGludCBsID0gcG9zW3VdLCByID0gcG9zW3ZdOwogICAgaWYgKGwgPiByKSBzd2FwKGwsIHIpOwogICAgaW50IGsgPSBfX2xnKHIgLSBsICsgMSk7CiAgICByZXR1cm4gTUlOX0hJR0gobWluSGlnaFtsXVtrXSwgbWluSGlnaFtyIC0gTUFTSyhrKSArIDFdW2tdKTsKfQoKaW50IGRpc3QoaW50IHUsIGludCB2KSB7CiAgICBpbnQgcCA9IExDQSh1LCB2KTsKICAgIHJldHVybiBoW3VdICsgaFt2XSAtIDIgKiBoW3BdOwp9CgpsbCBsYXp5X2FkZFtOIC8gUyArIDVdOwppbnQgbGF6eV9zZXRbTiAvIFMgKyA1XSwgZmlyc3Rfc2V0W04gLyBTICsgNV07CmxsIGFuc1tOXSwgdmFsW04gLyBTICsgNV1bTl0sIG9sZFtOXTsKCnZvaWQgcmVidWlsZChpbnQgQikgewogICAgaWYgKGxhenlfc2V0W0JdID09IDApIHJldHVybjsKICAgIEZPUihpLCBCICogUywgKEIgKyAxKSAqIFMgLSAxKSB7CiAgICAgICAgYW5zW2ldICs9IHZhbFtCXVthW2ldXSAtIG9sZFtpXSAtIGRpc3QoYVtpXSwgZmlyc3Rfc2V0W0JdKTsKICAgICAgICBhW2ldID0gbGF6eV9zZXRbQl07CiAgICAgICAgb2xkW2ldID0gdmFsW0JdW2FbaV1dOwogICAgfQogICAgZmlyc3Rfc2V0W0JdID0gLTE7CiAgICBsYXp5X3NldFtCXSA9IDA7Cn0KCnZvaWQgaW5pdCh2b2lkKSB7CiAgICBjaW4gPj4gbiA+PiBtID4+IHE7CiAgICBSRVAoaSwgbSkgY2luID4+IGFbaV07CiAgICBGT1IoaSwgMiwgbikgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgR1t1XS5wYih2KTsKICAgICAgICBHW3ZdLnBiKHUpOwogICAgfQp9Cgp2b2lkIHByb2Nlc3Modm9pZCkgewogICAgZGZzKDEsIC0xKTsKICAgIEZPUihpLCAxLCB0aW1lcikgbWluSGlnaFtpXVswXSA9IHRvdXJbaV07CiAgICBGT1IoaiwgMSwgMTkpIEZPUihpLCAxLCB0aW1lciAtIE1BU0soaikgKyAxKQogICAgICAgIG1pbkhpZ2hbaV1bal0gPSBNSU5fSElHSChtaW5IaWdoW2ldW2ogLSAxXSwgbWluSGlnaFtpICsgTUFTSyhqIC0gMSldW2ogLSAxXSk7CgogICAgbWVtc2V0KGZpcnN0X3NldCwgLTEsIHNpemVvZiBmaXJzdF9zZXQpOwogICAgd2hpbGUocS0tKSB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgY2luID4+IHR5cGU7CiAgICAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICAgICBpbnQgdSwgdjsKICAgICAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAgICAgRk9SKEIsIDAsIG0gLyBTKQogICAgICAgICAgICAgICAgaWYgKGxhenlfc2V0W0JdID09IHUpCiAgICAgICAgICAgICAgICAgICAgbGF6eV9hZGRbQl0gKz0gdjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhenlfc2V0W0JdID09IDApCiAgICAgICAgICAgICAgICAgICAgdmFsW0JdW3VdICs9IHY7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgICAgaW50IGwsIHIsIHo7CiAgICAgICAgICAgIGNpbiA+PiBsID4+IHIgPj4gejsKICAgICAgICAgICAgbC0tOyByLS07CiAgICAgICAgICAgIGlmIChsIC8gUyA9PSByIC8gUykgewogICAgICAgICAgICAgICAgcmVidWlsZChsIC8gUyk7CiAgICAgICAgICAgICAgICBGT1IoaSwgbCwgcikgewogICAgICAgICAgICAgICAgICAgIGFuc1tpXSArPSB2YWxbbCAvIFNdW2FbaV1dIC0gb2xkW2ldIC0gZGlzdChhW2ldLCB6KTsKICAgICAgICAgICAgICAgICAgICBhW2ldID0gejsKICAgICAgICAgICAgICAgICAgICBvbGRbaV0gPSB2YWxbbCAvIFNdW3pdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVidWlsZChsIC8gUyk7CiAgICAgICAgICAgIHJlYnVpbGQociAvIFMpOwogICAgICAgICAgICBGT1IoaSwgbCwgKGwgLyBTICsgMSkgKiBTIC0gMSkgewogICAgICAgICAgICAgICAgYW5zW2ldICs9IHZhbFtsIC8gU11bYVtpXV0gLSBvbGRbaV0gLSBkaXN0KGFbaV0sIHopOwogICAgICAgICAgICAgICAgYVtpXSA9IHo7CiAgICAgICAgICAgICAgICBvbGRbaV0gPSB2YWxbbCAvIFNdW3pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEZPUihpLCAociAvIFMpICogUywgcikgewogICAgICAgICAgICAgICAgYW5zW2ldICs9IHZhbFtyIC8gU11bYVtpXV0gLSBvbGRbaV0gLSBkaXN0KGFbaV0sIHopOwogICAgICAgICAgICAgICAgYVtpXSA9IHo7CiAgICAgICAgICAgICAgICBvbGRbaV0gPSB2YWxbciAvIFNdW3pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEZPUihpLCBsIC8gUyArIDEsIHIgLyBTIC0gMSkgewogICAgICAgICAgICAgICAgaWYgKGZpcnN0X3NldFtpXSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICBmaXJzdF9zZXRbaV0gPSB6OwogICAgICAgICAgICAgICAgaWYgKGxhenlfc2V0W2ldID4gMCkgbGF6eV9hZGRbaV0gLT0gZGlzdChsYXp5X3NldFtpXSwgeik7CiAgICAgICAgICAgICAgICBsYXp5X3NldFtpXSA9IHo7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgdTsgY2luID4+IHU7CiAgICAgICAgICAgIHUtLTsKICAgICAgICAgICAgcmVidWlsZCh1IC8gUyk7CiAgICAgICAgICAgIGNvdXQgPDwgYW5zW3VdICsgbGF6eV9hZGRbdSAvIFNdICsgdmFsW3UgLyBTXVthW3VdXSAtIG9sZFt1XSA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwovLyAgICBjaW4gPj4gdGM7CiAgICB3aGlsZSh0Yy0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHByb2Nlc3MoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==