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 u32 = uint32_t;
using i64 = int64_t;
using u64 = uint64_t;
constexpr i64 inf = 1e18;
void solve() {
	int n, c, q;
	std::cin >> n >> c >> q;
	std::vector<int> a(n + 1);
	for (int i = 1; i <= n; i++) {
		std::cin >> a[i];
	}
	std::vector<std::vector<i64>> dp(n + 2, std::vector<i64>(c + 1));
	std::vector<std::vector<i64>> down(n + 2, std::vector<i64>(c + 1));
	std::vector<std::vector<i64>> up(n + 2, std::vector<i64>(c + 1));
	for (int i = 0; i <= c; i++) {
		dp[n + 1][i] = 1;
	}
	for (int i = n; i >= 1; --i) {
		for (int j = 0; j <= c; j++) {
			std::vector<std::pair<int, i64>> tmp;
			for (int k = i; k <= i + j && k <= n; k++) {
				tmp.emplace_back(a[k], dp[k + 1][j - k + i]);
			}
			std::sort(tmp.begin(), tmp.end());
			for (auto t : tmp) {
				if (t.first == a[i]) {
					down[i][j] = dp[i][j];
					up[i][j] = std::min(dp[i][j] + t.second, inf);
				}
				dp[i][j] = std::min(dp[i][j] + t.second, inf);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= c; j++) {
			up[i][j] -= down[i][j];
			down[i][j] = std::min(down[i][j] + down[i - 1][j], inf);
		}
	}
	while (q--) {
		int i;
		i64 j;
		std::cin >> i >> j;
		if (j > dp[1][c]) {
			std::cout << -1 << "\n";
		} else {
			int pos = 0;
			int lft = c;
			int ans = 0;
			while (!ans) {
				int l = pos;
				int r = n;
				while (l < r) {
					int mid = l + r + 1 >> 1;
					i64 t = j - down[mid][lft] + down[pos][lft];
					if (t >= 1 && t <= up[mid][lft]) {
						l = mid;
					} else {
						r = mid - 1;
					}
				}
				if (l >= i) {
					ans = a[i];
				} else {
					std::vector<std::pair<int, i64>> tmp;
					j -= down[l][lft] - down[pos][lft];
					++l;
					for (int k = l; k <= l + lft && k <= n; k++) {
						tmp.emplace_back(a[k], dp[k + 1][lft - k + l]);
					}
					std::sort(tmp.begin(), tmp.end());
					for (auto t : tmp) {
						if (j > t.second) {
							j -= t.second;
						} else {
							int p = l;
							while (a[p] != t.first) {
								++p;
							}
							if (i <= p) {
								ans = a[l + p - i];
							} else {
								pos = p;
								lft = lft - p + l;
							}
							break;
						}
					}
				}
			}
			std::cout << ans << "\n";
		}
	}
}
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	int T;
	std::cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}