#include<bits/stdc++.h>
using namespace std;
int C;
int n,m,q;
namespace sol15
{
const int mn=4005,mm=8005;
int cl,cr,res;
int hd[mn],to[mm<<1],nxt[mm<<1],cnt=2;
int a[mn],b[mn];
int vis[mn],vnt=0;
void add(int x,int y)
{
nxt[cnt]=hd[x];
to[cnt]=y;
hd[x]=cnt++;
}
void dfs(int x)
{
vis[x]=vnt;
if(cl<=a[x] && a[x]<=cr)res=max(res,b[x]);
for(int i=hd[x];i;i=nxt[i])
{
int u=to[i];
if(vis[u]!=vnt)
{
dfs(u);
}
}
}
void S()
{
int op,x,y,z;
scanf("%d%d%d",&n,&m,&q);
cnt=2;
for(int i=1;i<=n;i++)
{
hd[i]=0;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
}
for(int i=1;i<=q;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d%d",&x,&y);
swap(a[x],a[y]);
}
if(op==2)
{
scanf("%d%d",&x,&y);
swap(b[x],b[y]);
}
if(op==3)
{
++vnt;
res=0;
scanf("%d%d%d",&x,&y,&z);
cl=y,cr=z;
dfs(x);
printf("%d\n",res);
}
}
}
}
int main()
{
freopen("recall.in","r",stdin);
freopen("recall.out","w",stdout);
int T;
scanf("%d%d",&C,&T);
while(T--)
{
sol15::S();
}
}