1
10 2 20
8 5 2 4 10 3 9 7 1 6
5 10
3 17
6 31
3 46
10 42
7 19
9 36
7 3
3 13
8 32
10 25
9 34
10 34
6 33
3 9
2 17
4 5
10 44
9 15
5 40
 1
47 1 47
40 45 19 10 44 33 47 12 2 46 16 23 3 14 21 28 31 42 22 18 35 38 24 25 36 32 4 34 5 20 37 39 6 9 1 7 29 8 17 27 30 11 13 41 15 43 26
39 25
41 24
32 30
10 6
30 13
24 35
41 17
31 31
9 44
21 8
43 23
8 5
29 13
8 4
47 20
22 10
37 27
17 39
43 23
14 42
46 19
43 24
30 31
24 35
31 13
31 32
20 9
3 2
20 9
14 7
7 3
21 36
32 30
47 19
11 43
6 2
31 31
26 12
47 20
2 1
40 24
16 40
45 21
36 28
36 28
17 38
30 31
 1
1 1 4
1
1 1
1 2
1 3
1 4
 1
10 1 1
10 4 6 5 7 9 8 1 3 2
6 10

3
2
7
10
6
7
7
7
5
1
6
6
1
9
4
4
4
1
1
3
 27
27
37
16
20
24
11
20
46
35
11
2
34
47
26
24
7
28
11
3
26
13
37
24
37
37
22
10
22
14
47
38
37
43
23
33
20
4
26
19
30
21
43
1
1
42
37
 1
-1
-1
-1
 9

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
template <class T>
bool ckmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 30001;
long long ch[MX][6];
void solve() {
  int N, C, Q;
  cin >> N >> C >> Q;
  set<pair<long long, long long> > cur[C + 1];
  long long del[C + 1];
  for (int i = 0; i < (C + 1); i++) del[i] = 0;
  int rem[Q];
  for (int i = 0; i < (Q); i++) rem[i] = C;
  vector<vector<int> > atPos(N);
  vector<pair<int, int> > toAdd[N][C + 1];
  int pos[Q];
  long long nc[Q];
  int ans[Q];
  for (int i = 0; i < (Q); i++) ans[i] = -1;
  int P[N];
  for (int i = 0; i < (N); i++) cin >> P[i];
  for (int i = 0; i < (Q); i++) {
    int X;
    long long K;
    cin >> X >> K;
    X--;
    K--;
    cur[C].insert({K, i});
    pos[i] = X;
    nc[i] = K;
    atPos[X].push_back(i);
  }
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (C + 1); j++) {
      for (auto& a : toAdd[i][j]) {
        cur[j].insert({a.first + del[j], a.second});
        nc[a.second] += del[j];
      }
    }
    for (int j = 0; j < (C + 1); j++) {
      vector<pair<int, int> > ops;
      for (int k = 0; k < (j + 1); k++) {
        if (i + k < N) {
          ops.push_back({P[i + k], k});
        }
      }
      sort(ops.begin(), ops.end());
      long long curSum = 0;
      for (int x = 0; x < ((int)(ops).size()); x++) {
        pair<int, int> a = ops[x];
        if (a.second == 0) {
          long long num = 1;
          if (i < N - 1) num = ch[N - i - 2][j];
          del[j] += curSum;
          curSum = num;
        } else {
          long long numWith = 1;
          if (N - i - a.second - 1 > 0)
            numWith = ch[N - i - a.second - 2][j - a.second];
          auto it = cur[j].upper_bound({del[j] + curSum, -1});
          while (it != cur[j].end() && it->first < del[j] + curSum + numWith) {
            rem[it->second] -= a.second;
            if (pos[it->second] <= i + a.second) {
              if (pos[it->second] >= i)
                ans[it->second] = P[2 * i + a.second - pos[it->second]];
            } else {
              toAdd[i + a.second + 1][rem[it->second]].push_back(
                  {it->first - curSum - del[j], it->second});
              nc[it->second] -= curSum + del[j];
            }
            cur[j].erase(it);
            it = cur[j].upper_bound({del[j] + curSum, -1});
          }
          curSum += numWith;
        }
      }
      for (auto& a : atPos[i]) {
        long long num = 1;
        if (i < N - 1) num = ch[N - 2 - i][j];
        if (cur[j].count({nc[a], a}) && num > nc[a] - del[j]) {
          ans[a] = P[i];
        }
      }
    }
  }
  for (int i = 0; i < (Q); i++) {
    cout << ans[i] << nl;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ch[0][0] = 1;
  for (int i = 1; i < (6); i++) ch[0][i] = 0;
  for (int i = 1; i < (MX); i++) {
    ch[i][0] = 1;
    for (int j = 1; j < (6); j++) {
      ch[i][j] = ch[i - 1][j - 1] + ch[i - 1][j];
    }
  }
  for (int i = 0; i < (MX); i++) {
    for (int j = 1; j < (6); j++) {
      ch[i][j] += ch[i][j - 1];
    }
  }
  int T = 1;
  cin >> T;
  while (T--) {
    solve();
  }
  return 0;
}
