// ~~ 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]; // tất cả các thằng trong block đều cộng thêm lazy_add[B]
int lazy_set[N / S + 5]; // giá trị hiện tại đang dc gán
int first_set[N / S + 5]; // giá trị đầu tiên dc gán
ll ans[N]; // kết quả của nhân viên i
ll val[N / S + 5][N]; // giá trị hiện tại của giá trị u trong block B
ll old[N]; // để ko phải reset mảng val, dùng mảng old để trừ đi những giá trị có sẵn trước khi add
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+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJnZW4iCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IDFlOSArIDI3MDkyMDA4Owpjb25zdCBsbCBJTkYgPSAxZTE4ICsgMjcwOTIwMDg7CmNvbnN0IGludCBOID0gMjAwMDAwICsgNTsKY29uc3QgaW50IFMgPSAzNTA7CmludCBuLCBtLCBxLCBhW05dOwp2ZWN0b3I8aW50PiBHW05dOwppbnQgcG9zW05dLCB0aW1lciA9IDAsIGhbTl0sIG1pbkhpZ2hbTiA8PCAxXVsyMF0sIHRvdXJbTiA8PCAxXTsKCnZvaWQgZGZzKGludCB1LCBpbnQgcGFyKSB7CiAgICBwb3NbdV0gPSArK3RpbWVyOwogICAgdG91clt0aW1lcl0gPSB1OwogICAgZm9yKGludCB2IDogR1t1XSkgaWYgKHYgIT0gcGFyKSB7CiAgICAgICAgaFt2XSA9IGhbdV0gKyAxOwogICAgICAgIGRmcyh2LCB1KTsKICAgICAgICB0b3VyWysrdGltZXJdID0gdTsKICAgIH0KfQoKI2RlZmluZSBNSU5fSElHSCh4LCB5KSAoaFt4XSA8IGhbeV0gPyB4IDogeSkKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGludCBsID0gcG9zW3VdLCByID0gcG9zW3ZdOwogICAgaWYgKGwgPiByKSBzd2FwKGwsIHIpOwogICAgaW50IGsgPSBfX2xnKHIgLSBsICsgMSk7CiAgICByZXR1cm4gTUlOX0hJR0gobWluSGlnaFtsXVtrXSwgbWluSGlnaFtyIC0gTUFTSyhrKSArIDFdW2tdKTsKfQoKaW50IGRpc3QoaW50IHUsIGludCB2KSB7CiAgICBpbnQgcCA9IExDQSh1LCB2KTsKICAgIHJldHVybiBoW3VdICsgaFt2XSAtIDIgKiBoW3BdOwp9CgpsbCBsYXp5X2FkZFtOIC8gUyArIDVdOyAvLyB04bqldCBj4bqjIGPDoWMgdGjhurFuZyB0cm9uZyBibG9jayDEkeG7gXUgY+G7mW5nIHRow6ptIGxhenlfYWRkW0JdCmludCBsYXp5X3NldFtOIC8gUyArIDVdOyAvLyBnacOhIHRy4buLIGhp4buHbiB04bqhaSDEkWFuZyBkYyBnw6FuCmludCBmaXJzdF9zZXRbTiAvIFMgKyA1XTsgLy8gZ2nDoSB0cuG7iyDEkeG6p3UgdGnDqm4gZGMgZ8OhbiAKbGwgYW5zW05dOyAvLyBr4bq/dCBxdeG6oyBj4bunYSBuaMOibiB2acOqbiBpIApsbCB2YWxbTiAvIFMgKyA1XVtOXTsgLy8gZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkgY+G7p2EgZ2nDoSB0cuG7iyB1IHRyb25nIGJsb2NrIEIKbGwgb2xkW05dOyAvLyDEkeG7gyBrbyBwaOG6o2kgcmVzZXQgbeG6o25nIHZhbCwgZMO5bmcgbeG6o25nIG9sZCDEkeG7gyB0cuG7qyDEkWkgbmjhu69uZyBnacOhIHRy4buLIGPDsyBz4bq1biB0csaw4bubYyBraGkgYWRkCgp2b2lkIHJlYnVpbGQoaW50IEIpIHsKICAgIGlmIChsYXp5X3NldFtCXSA9PSAwKSByZXR1cm47CiAgICBGT1IoaSwgQiAqIFMsIChCICsgMSkgKiBTIC0gMSkgewogICAgICAgIGFuc1tpXSArPSB2YWxbQl1bYVtpXV0gLSBvbGRbaV0gLSBkaXN0KGFbaV0sIGZpcnN0X3NldFtCXSk7CiAgICAgICAgYVtpXSA9IGxhenlfc2V0W0JdOwogICAgICAgIG9sZFtpXSA9IHZhbFtCXVthW2ldXTsKICAgIH0KICAgIGZpcnN0X3NldFtCXSA9IC0xOwogICAgbGF6eV9zZXRbQl0gPSAwOwp9Cgp2b2lkIGluaXQodm9pZCkgewogICAgY2luID4+IG4gPj4gbSA+PiBxOwogICAgUkVQKGksIG0pIGNpbiA+PiBhW2ldOwogICAgRk9SKGksIDIsIG4pIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIEdbdV0ucGIodik7CiAgICAgICAgR1t2XS5wYih1KTsKICAgIH0KfQoKdm9pZCBwcm9jZXNzKHZvaWQpIHsKICAgIGRmcygxLCAtMSk7CiAgICBGT1IoaSwgMSwgdGltZXIpIG1pbkhpZ2hbaV1bMF0gPSB0b3VyW2ldOwogICAgRk9SKGosIDEsIDE5KSBGT1IoaSwgMSwgdGltZXIgLSBNQVNLKGopICsgMSkKICAgICAgICBtaW5IaWdoW2ldW2pdID0gTUlOX0hJR0gobWluSGlnaFtpXVtqIC0gMV0sIG1pbkhpZ2hbaSArIE1BU0soaiAtIDEpXVtqIC0gMV0pOwoKICAgIG1lbXNldChmaXJzdF9zZXQsIC0xLCBzaXplb2YgZmlyc3Rfc2V0KTsKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGludCB0eXBlOwogICAgICAgIGNpbiA+PiB0eXBlOwogICAgICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgICAgaW50IHUsIHY7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIEZPUihCLCAwLCBtIC8gUykKICAgICAgICAgICAgICAgIGlmIChsYXp5X3NldFtCXSA9PSB1KQogICAgICAgICAgICAgICAgICAgIGxhenlfYWRkW0JdICs9IHY7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXp5X3NldFtCXSA9PSAwKQogICAgICAgICAgICAgICAgICAgIHZhbFtCXVt1XSArPSB2OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGludCBsLCByLCB6OwogICAgICAgICAgICBjaW4gPj4gbCA+PiByID4+IHo7CiAgICAgICAgICAgIGwtLTsgci0tOwogICAgICAgICAgICBpZiAobCAvIFMgPT0gciAvIFMpIHsKICAgICAgICAgICAgICAgIHJlYnVpbGQobCAvIFMpOwogICAgICAgICAgICAgICAgRk9SKGksIGwsIHIpIHsKICAgICAgICAgICAgICAgICAgICBhbnNbaV0gKz0gdmFsW2wgLyBTXVthW2ldXSAtIG9sZFtpXSAtIGRpc3QoYVtpXSwgeik7CiAgICAgICAgICAgICAgICAgICAgYVtpXSA9IHo7CiAgICAgICAgICAgICAgICAgICAgb2xkW2ldID0gdmFsW2wgLyBTXVt6XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYnVpbGQobCAvIFMpOwogICAgICAgICAgICByZWJ1aWxkKHIgLyBTKTsKICAgICAgICAgICAgRk9SKGksIGwsIChsIC8gUyArIDEpICogUyAtIDEpIHsKICAgICAgICAgICAgICAgIGFuc1tpXSArPSB2YWxbbCAvIFNdW2FbaV1dIC0gb2xkW2ldIC0gZGlzdChhW2ldLCB6KTsKICAgICAgICAgICAgICAgIGFbaV0gPSB6OwogICAgICAgICAgICAgICAgb2xkW2ldID0gdmFsW2wgLyBTXVt6XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBGT1IoaSwgKHIgLyBTKSAqIFMsIHIpIHsKICAgICAgICAgICAgICAgIGFuc1tpXSArPSB2YWxbciAvIFNdW2FbaV1dIC0gb2xkW2ldIC0gZGlzdChhW2ldLCB6KTsKICAgICAgICAgICAgICAgIGFbaV0gPSB6OwogICAgICAgICAgICAgICAgb2xkW2ldID0gdmFsW3IgLyBTXVt6XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBGT1IoaSwgbCAvIFMgKyAxLCByIC8gUyAtIDEpIHsKICAgICAgICAgICAgICAgIGlmIChmaXJzdF9zZXRbaV0gPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgZmlyc3Rfc2V0W2ldID0gejsKICAgICAgICAgICAgICAgIGlmIChsYXp5X3NldFtpXSA+IDApIGxhenlfYWRkW2ldIC09IGRpc3QobGF6eV9zZXRbaV0sIHopOwogICAgICAgICAgICAgICAgbGF6eV9zZXRbaV0gPSB6OwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW50IHU7IGNpbiA+PiB1OwogICAgICAgICAgICB1LS07CiAgICAgICAgICAgIHJlYnVpbGQodSAvIFMpOwogICAgICAgICAgICBjb3V0IDw8IGFuc1t1XSArIGxhenlfYWRkW3UgLyBTXSArIHZhbFt1IC8gU11bYVt1XV0gLSBvbGRbdV0gPDwgJ1xuJzsKICAgICAgICB9CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKHRhc2siLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW50IHRjID0gMTsKLy8gICAgY2luID4+IHRjOwogICAgd2hpbGUodGMtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBwcm9jZXNzKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=