#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>>dist;
vector<vector<int>>adj;
void dfs(int s, int p, int root){
dist[root][s] = dist[root][p]+1;
for(int u : adj[s])
if(u != p)
dfs(u,s,root);
}
int main(){
//freopen("in.txt","r", stdin);
int n, m, q;
cin >> n >> m >> q;
vector<int> a(m+1);
for(int i = 1; i <= m; i++)
cin >> a[i];
adj.assign(n+1,vector<int>());
for(int i = 0; i < n-1; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dist.assign(n+1,vector<int>(n+1));
for(int i = 1; i <= n; i++){
dist[i][0] = -1;
dfs(i,0,i);
}
vector<long long>tourist_opinion(m+1);
while(q--){
char qtype;
cin >> qtype;
if(qtype == 't'){
int f,g,c;
cin >> f >> g >> c;
for(int i = f; i <= g; i++){
tourist_opinion[i] -= dist[a[i]][c];
a[i] = c;
}
}else if(qtype == 'e'){
int c, d;
cin >> c >> d;
for(int i = 1; i <= m; i++)
if(a[i] == c)
tourist_opinion[i] += d;
}else{
int v;
cin >> v;
cout << tourist_opinion[v] << '\n';
}
}
return 0;
}