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

/*input
2
3 1 9
1 2 3
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3
6 4 4
6 5 4 3 1 2
1 1
3 14
1 59
2 6
*/
#pragma GCC optimize ("O3")
#pragma GCC target ("avx2")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T, typename X>
using ordered_map = tree<T, X, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T, typename X>
using fast_map = cc_hash_table<T, X>;
using ull = __uint128_t;
//using ull = unsigned long long;
using ll = long long;
using ld = long double;
mt19937_64 rng(123);
const ll mod = 1000000007;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	while (t--)
	{
		int n, c, q;
		cin >> n >> c >> q;
		int p[n];
		for (int i = 0; i < n; i++)
		{
			cin >> p[i];
		}
		int ind[n];
		ind[n - 1] = n - 1;
		for (int i = n - 2; i >= 0; i--)
		{
			ind[i] = i;
			if (p[i + 1] > p[i])
				ind[i] = ind[i + 1];
		}
		ull DP[n + 1][5];
		for (int i = 0; i < 5; i++)
			DP[n][i] = 1;
		for (int i = n - 1; i >= 0; i--)
		{
			for (int c = 0; c <= 4; c++)
			{
				DP[i][c] = DP[i + 1][c];
				for (int a = 1; a <= c; a++)
				{
					if (i + a < n) {
						DP[i][c] += DP[i + a + 1][c - a];
					}
				}
			}
		}
		ull SUM[n + 1][5];
		for (int t = 0; t < 5; t++)
			SUM[n][t] = 0;
		for (int i = n - 1; i >= 0; i--)
		{
			for (int t = 0; t < 5; t++)
			{
				SUM[i][t] = SUM[i + 1][t];
				for (int a = 1; a <= t; a++)
				{
					if (i + a < n && p[i + a] < p[i])
					{
						SUM[i][t] += DP[i + a + 1][t - a];
					}
				}
			}
		}
		while (q--)
		{
			int i;
			long long jj;
			cin >> i >> jj;
			ull j = jj;
			i--;
			if (DP[0][c] < j)
				cout << "-1\n";
			else
			{
				int cnt = c;
				int id = 0;
				int ans = p[i];
				while (id < n && cnt > 0)
				{
					if (DP[id][cnt] - DP[id + 1][cnt] < j)
					{
						int lo = id + 1;
						int hi = n;
						while (lo < hi)
						{
							int m = (lo + hi + 1) / 2;
							if (DP[id][cnt] - DP[m][cnt] < j)
								lo = m;
							else
								hi = m - 1;
						}
						j -= DP[id][cnt] - DP[lo][cnt];
						id = lo;
						continue;
					}
					int mn = -1;
					int bent = -1;
atgal:;
					for (int a = 0; a <= cnt && id + a < n; a++)
					{
						if (p[id + a] >= bent)
						{
							if (mn == -1 || p[id + a] < p[mn])
								mn = id + a;
						}
					}
					if (j > DP[mn + 1][cnt - (mn - id)])
					{
						j -= DP[mn + 1][cnt - (mn - id)];
						bent = p[mn] + 1;
						mn = -1;
						goto atgal;
					}
					if (id <= i && i <= mn)
					{
						ans = p[id + mn - i];
						break;
					}
					cnt -= mn - id;
					id = mn + 1;
				}
				cout << ans << "\n";
			}
		}
	}
}