#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,q,qq,x,y,b[2000005],c[4000005],l,r,ge,zhen[25],xx,yy;
bool o[25][25],p[25],oo[25][25];
vector<int>a[25];
ll read(){
ll x=0,sign=1;char c=getchar();
while(!(c>='0'&&c<='9')){if(c=='-')sign=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*sign;
}
void doo(int x,int y){
xx=zhen[x],yy=zhen[y];
if(!p[x]){sort(a[xx].begin(),a[xx].end());p[x]=1;}
if(!p[y]){sort(a[yy].begin(),a[yy].end());p[y]=1;}
if(a[xx][m]<=a[yy][1])return;
if(a[xx][1]>=a[yy][m]){swap(zhen[x],zhen[y]);return;}
l=r=1,ge=0;
while(l<=m&&r<=m){
if(a[xx][l]<=a[yy][r]){c[++ge]=a[xx][l];l++;}
else{c[++ge]=a[yy][r];r++;}
}
if(l==m+1){while(ge<=2*m){c[++ge]=a[yy][r];r++;}}
else{while(ge<=2*m){c[++ge]=a[xx][l];l++;}}
for(int j=1;j<=m;++j){a[xx][j]=c[j];a[yy][j]=c[j+m];}
}
int main()
{
m=read(),n=read(),q=read();
for(int i=1;i<=n;++i){
zhen[i]=i;a[i].push_back(0);
for(int j=1;j<=m;++j){a[i].push_back(read());}
}
for(int i=1;i<=q;++i){
qq=read();
x=read(),y=read();
if(qq==1){doo(x,y);}
else{cout<<a[zhen[x]][y]<<"\n";}
}
return 0;
}