#include <bits/stdc++.h>
typedef unsigned u3;
std::vector<u3> graph[2025];
u3 n, m, q, a[2025], b[2025], vis[2025];
u3 dfs(u3 u, u3 l, u3 r) {
if (vis[u]) return 0;
u3 ans = l <= a[u] && a[u] <= r ? b[u] : 0, t, v;
vis[u] = 1;
for (u3 i = 0; i != graph[u].size(); ++i) {
u3 v = graph[u][i];
t = dfs(v, l, r);
if (ans < t) ans = t;
}
return ans;
}
void solve() {
scanf("%u%u%u", &n, &m, &q);
while (m--) {
u3 u, v;
scanf("%u%u", &u, &v);
graph[u].push_back(v);
}
for (u3 i = 1; i <= n; ++i) scanf("%u", a + i);
for (u3 i = 1; i <= n; ++i) scanf("%u", b + i);
while (q--) {
u3 o, x;
scanf("%u%u", &o, &x);
if (o != 3) {
u3 y, t;
scanf("%u", &y);
if (o == 1) t = a[x], a[x] = a[y], a[y] = t;
else t = b[x], b[x] = b[y], b[y] = t;
} else {
u3 l, r;
scanf("%u%u", &l, &r);
printf("%u\n", dfs(x, l, r));
for (u3 i = 0; i != 2025; ++i) vis[i] = 0;
}
}
}
int main() {
freopen("recall.in", "r", stdin);
freopen("recall.out", "w", stdout);
u3 c, t;
scanf("%u%u", &c, &t);
while (t--) solve();
return 0;
}