#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void sortAndUpdate(vector<vector<int>>& sequences, int x, int y) {
vector<int> b;
for (int num : sequences[x - 1]) {
b.push_back(num);
}
for (int num : sequences[y - 1]) {
b.push_back(num);
}
sort(b.begin(), b.end());
sequences[x - 1].clear();
sequences[y - 1].clear();
for (int i = 0; i < b.size() / 2; ++i) {
sequences[x - 1].push_back(b[i]);
}
for (int i = b.size() / 2; i < b.size(); ++i) {
sequences[y - 1].push_back(b[i]);
}
}
int main() {
int n, m, q;
cin >> n >> m >> q;
vector<vector<int>> sequences(m, vector<int>(n));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> sequences[i][j];
}
}
for (int i = 0; i < q; ++i) {
int op, x, y;
cin >> op >> x >> y;
if (op == 1) {
sortAndUpdate(sequences, x, y);
} else if (op == 2) {
cout << sequences[x - 1][y - 1] << endl;
}
}
return 0;
}