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>
using namespace std;
const int N = 30005, MX = 5, Q = 3E5 + 5;
int n, c, q, t, a[N], ans[Q], pos[Q];
long long dp[N][MX], lex[Q], off[MX], cnt[MX + 1];
vector<pair<int, int>> cur, eve[N];
vector<int> dl[N];
set<pair<long long, int>> pro[MX];
void init() {
  fill(dp[0], dp[0] + MX, 1);
  for (int i = 1; i < N; i++) {
    for (int j = 0; j < MX; j++) {
      for (int k = 0; k <= j && k < i; k++) {
        dp[i][j] += dp[i - k - 1][j - k];
      }
    }
  }
}
int lower(long long u) {
  for (int i = 1; i <= MX; i++) {
    if (cnt[i] > u) {
      return i - 1;
    }
  }
}
void solve() {
  for (int i = 0; i < MX; i++) {
    pro[i].clear();
  }
  fill(off, off + MX, 0);
  cin >> n >> c >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= q; i++) {
    cin >> pos[i] >> lex[i];
    lex[i]--;
    if (lex[i] >= dp[n][c]) {
      ans[i] = -1;
    } else {
      eve[1].push_back({i, c});
      dl[pos[i]].push_back(i);
      ans[i] = 0;
    }
  }
  for (int i = 1; i <= n; i++) {
    for (auto [ind, cos] : eve[i]) {
      pro[cos].insert({lex[ind] + off[cos], ind});
    }
    eve[i].clear();
    cur.clear();
    for (int j = 0; j <= c && i + j <= n; j++) {
      cur.push_back({a[i + j], j});
      sort(cur.begin(), cur.end());
      long long l, r;
      for (int k = 0; k <= j; k++) {
        auto [_, cos] = cur[k];
        cnt[k + 1] = cnt[k] + dp[n - (i + cos + 1) + 1][j - cos];
        if (cos == 0) {
          l = cnt[k];
          r = cnt[k + 1];
        }
      }
      while (!pro[j].empty() && pro[j].begin()->first - off[j] < l) {
        auto [cl, ind] = *pro[j].begin();
        pro[j].erase(pro[j].begin());
        if (ans[ind] != 0) {
          continue;
        }
        int p = lower(cl - off[j]);
        auto [_, cos] = cur[p];
        if (i + cos >= pos[ind]) {
          ans[ind] = a[2 * i + cos - pos[ind]];
        } else {
          lex[ind] = cl - off[j] - cnt[p];
          eve[i + cos + 1].push_back({ind, j - cos});
        }
      }
      while (!pro[j].empty() && prev(pro[j].end())->first - off[j] >= r) {
        auto [cl, ind] = *prev(pro[j].end());
        pro[j].erase(prev(pro[j].end()));
        if (ans[ind] != 0) {
          continue;
        }
        int p = lower(cl - off[j]);
        auto [_, cos] = cur[p];
        if (i + cos >= pos[ind]) {
          ans[ind] = a[2 * i + cos - pos[ind]];
        } else {
          lex[ind] = cl - off[j] - cnt[p];
          eve[i + cos + 1].push_back({ind, j - cos});
        }
      }
      off[j] += l;
    }
    for (int ind : dl[i]) {
      if (ans[ind] == 0) {
        ans[ind] = a[i];
      }
    }
    dl[i].clear();
  }
  for (int i = 1; i <= q; i++) {
    cout << ans[i] << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  init();
  cin >> t;
  while (t--) {
    solve();
  }
}
