#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fir first
#define sec second
#define pii pair<int,int>
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define pb push_back
const int inf=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
int op;
bool A,B,C,D;
int n,m,q,a[100010],b[100010];
vector<int>g[100010];
bool vis[2010];
int ans=0;
void dfs(int u,int l,int r)
{
if(a[u]>=l&&a[u]<=r)chmax(ans,b[u]);vis[u]=1;
for(auto v:g[u])if(!vis[v])dfs(v,l,r);
}
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++)
{
int u,v;
scanf("%lld %lld",&u,&v);
g[u].pb(v);
}
for(int i=1;i<=n;i++)scanf("%lld",a+i);
for(int i=1;i<=n;i++)scanf("%lld",b+i);
while(q--)
{
int op,x,y,l,r;
scanf("%lld %lld",&op,&x);
if(op==1)
{
scanf("%lld",&y);
swap(a[x],a[y]);
}
else if(op==2)
{
scanf("%lld",&y);
swap(b[x],b[y]);
}
else
{
scanf("%lld %lld",&l,&r);
memset(vis,0,sizeof(vis));
ans=0;
dfs(x,l,r);
printf("%lld\n",ans);
}
}
}
signed main()
{
freopen("recall.in","r",stdin);
freopen("recall.out","w",stdout);
int t;
scanf("%lld %lld",&op,&t);
A=(op==6||op>=10&&op<=16);
B=(op>=6&&op<=9);
C=(op>=10&&op<=12);
D=(op>=17&&op<=18);
while(t--)solve();
return 0;
}