#include<bits/stdc++.h>
using namespace std;
vector<int>adj[200005];
int ar[200005];
int lv[200005];
int pa[25][200005];
int in[200005],out[200005];
int cur=0;
int inf=1e9;
int n,m,q;
void dfs(int u,int p){
lv[u]=lv[p]+1;
pa[0][u]=p;
in[u]=++cur;
for(int i=1;i<20;i++)pa[i][u]=pa[i-1][pa[i-1][u]];
for(auto x:adj[u])if(x!=p)dfs(x,u);
out[u]=cur;
}
int lca(int a,int b){
if(lv[a]<lv[b])swap(a,b);
for(int i=19;i>=0;i--)if(lv[pa[i][a]]>=lv[b])a=pa[i][a];
if(a==b)return a;
for(int i=19;i>=0;i--)if(pa[i][a]!=pa[i][b])a=pa[i][a],b=pa[i][b];
return pa[0][a];
}
set<int>pos1[200005],pos2[200005];
void add(int x){
if(x>1)pos1[lca(ar[x],ar[x-1])].insert(x-1);
if(x<m)pos1[lca(ar[x],ar[x+1])].insert(x);
pos2[ar[x]].insert(x);
}
void del(int x){
if(x>1)pos1[lca(ar[x],ar[x-1])].erase(x-1);
if(x<m)pos1[lca(ar[x],ar[x+1])].erase(x);
pos2[ar[x]].erase(x);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>q;
for(int i=0;i<n-1;i++){
int a,b;cin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1,0);
for(int i=1;i<=m;i++)cin>>ar[i];
for(int i=1;i<=m;i++)add(i);
for(int i=0;i<q;i++){
int t;cin>>t;
if(t==1){
int pos,v;cin>>pos>>v;
del(pos);
ar[pos]=v;
add(pos);
}else{
int l,r,v;cin>>l>>r>>v;
auto it1=pos1[v].lower_bound(l),it2=pos2[v].lower_bound(l);
if(it1!=pos1[v].end()&&(*it1)+1<=r)cout<<(*it1)<<' '<<(*it1)+1<<"\n";
else if(it2!=pos2[v].end()&&(*it2)<=r)cout<<(*it2)<<' '<<(*it2)<<"\n";
else cout<<"-1 -1\n";
}
}
}