#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define pi pair<ll, ll>
#define fi first
#define se second
#define N 111111
int c, t, n, q, m, u, v, a[N], b[N], o[N], x[N], l[N], r[N], y[N];
vector<int> g[N];
void add(int u, int v){
g[u].push_back(v);
}
int vis[N];
ll bfs(int st, int l, int r){
memset(vis, 0, sizeof vis);
queue<int> q;
vis[st] = 1;
q.push(st);
int mx = 0;
while(q.size()){
int u = q.front();
q.pop();
if(l <= a[u] && a[u] <= r)
mx = max(mx, b[u]);
for(auto v : g[u]){
if(vis[v])
continue;
vis[v] = 1;
q.push(v);
}
}
return mx;
}
void solve(){
scanf("%lld%lld%lld", &n, &m, &q);
for(int i = 1 ; i <= n ; i++)
g[i].clear();
for(int i = 1 ; i <= m ; i++){
scanf("%lld%lld", &u, &v);
add(u, v);
}
for(int i = 1 ; i <= n ; i++){
scanf("%lld", &a[i]);
}
for(int i = 1 ; i <= n ; i++){
scanf("%lld", &b[i]);
}
if(n <= 2000){
for(int i = 1 ; i <= q ; i++){
scanf("%lld%lld", &o[i], &x[i]);
if(o[i] == 3){
scanf("%lld%lld", &l[i], &r[i]);
printf("%lld\n", bfs(x[i], l[i], r[i]));
}
else{
scanf("%lld", &y[i]);
((o[i] == 1) ? swap(a[x[i]], a[y[i]]) : swap(b[x[i]], b[y[i]]));
}
}
return;
}
}
signed main(){
freopen("recall.in", "r", stdin);
freopen("recall.out", "w", stdout);
scanf("%lld%lld", &c, &t);
while(t--){
solve();
}
exit(0);
}