#pragma GCC optimize ( Ofast )   #include<bits/stdc++.h>   using namespace std;   void*wmem;   char memarr[96000000];   template<class S, class T> inline S min_L(S a,T b){     return a<=b?a:b;   }   template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){     static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};     (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );     (*arr)=(T*)(*mem);     (*mem)=((*arr)+x);   }   template<class T> inline void walloc1d(T **arr, int x1, int x2, void **mem = &wmem){     walloc1d(arr, x2-x1, mem);     (*arr) -= x1;   }   template<class T1> void sortA_L(int N, T1 a[], void *mem = wmem){     sort(a, a+N);   }   template<class T1, class T2> void sortA_L(int N, T1 a[], T2 b[], void *mem = wmem){     int i;     pair<T1, T2>*arr;     walloc1d(&arr, N, &mem);     for(i=(0);i<(N);i++){       arr[i].first = a[i];       arr[i].second = b[i];     }     sort(arr, arr+N);     for(i=(0);i<(N);i++){       a[i] = arr[i].first;       b[i] = arr[i].second;     }   }   inline int my_getchar(){     static char buf[1048576];     static int s = 1048576;     static int e = 1048576;     if(s == e && e == 1048576){       e = fread(buf, 1, 1048576, stdin);       s = 0;     }     if(s == e){       return EOF;     }     return buf[s++];   }   inline void rd(int &x){     int k;     int m=0;     x=0;     for(;;){       k = my_getchar();       if(k== - ){         m=1;         break;       }       if( 0 <=k&&k<= 9 ){         x=k- 0 ;         break;       }     }     for(;;){       k = my_getchar();       if(k< 0 ||k> 9 ){         break;       }       x=x*10+k- 0 ;     }     if(m){       x=-x;     }   }   inline void rd(long long &x){     int k;     int m=0;     x=0;     for(;;){       k = my_getchar();       if(k== - ){         m=1;         break;       }       if( 0 <=k&&k<= 9 ){         x=k- 0 ;         break;       }     }     for(;;){       k = my_getchar();       if(k< 0 ||k> 9 ){         break;       }       x=x*10+k- 0 ;     }     if(m){       x=-x;     }   }   inline int rd_int(void){     int x;     rd(x);     return x;   }   struct MY_WRITER{     char buf[1048576];     int s;     int e;     MY_WRITER(){       s = 0;       e = 1048576;     }     ~MY_WRITER(){       if(s){         fwrite(buf, 1, s, stdout);       }     }   }   ;   MY_WRITER MY_WRITER_VAR;   void my_putchar(int a){     if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){       fwrite(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);       MY_WRITER_VAR.s = 0;     }     MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;   }   inline void wt_L(char a){     my_putchar(a);   }   inline void wt_L(int x){     int s=0;     int m=0;     char f[10];     if(x<0){       m=1;       x=-x;     }     while(x){       f[s++]=x%10;       x/=10;     }     if(!s){       f[s++]=0;     }     if(m){       my_putchar( - );     }     while(s--){       my_putchar(f[s]+ 0 );     }   }   template<class S> inline void arrInsert(const int k, int &sz, S a[], const S aval){     int i;     sz++;     for(i=sz-1;i>k;i--){       a[i] = a[i-1];     }     a[k] = aval;   }   template<class S, class T> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval){     int i;     sz++;     for(i=sz-1;i>k;i--){       a[i] = a[i-1];     }     for(i=sz-1;i>k;i--){       b[i] = b[i-1];     }     a[k] = aval;     b[k] = bval;   }   template<class S, class T, class U> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){     int i;     sz++;     for(i=sz-1;i>k;i--){       a[i] = a[i-1];     }     for(i=sz-1;i>k;i--){       b[i] = b[i-1];     }     for(i=sz-1;i>k;i--){       c[i] = c[i-1];     }     a[k] = aval;     b[k] = bval;     c[k] = cval;   }   template<class S, class T, class U, class V> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval, V d[], const V dval){     int i;     sz++;     for(i=sz-1;i>k;i--){       a[i] = a[i-1];     }     for(i=sz-1;i>k;i--){       b[i] = b[i-1];     }     for(i=sz-1;i>k;i--){       c[i] = c[i-1];     }     for(i=sz-1;i>k;i--){       d[i] = d[i-1];     }     a[k] = aval;     b[k] = bval;     c[k] = cval;     d[k] = dval;   }   template<class S, class T> inline S chmin(S &a, T b){     if(a>b){       a=b;     }     return a;   }   template<class S, class T> inline S chmax(S &a, T b){     if(a<b){       a=b;     }     return a;   }   int N;   int C;   int Q;   int A[30000];   int X;   long long Y;   long long cnt[5][30000+2];   int sz;   int lis[5];   int ind[5];   int usz[30000+2];   int ulis[30000+2][5];   int dsz[30000+2];   int dlis[30000+2][5];   long long skipL[5][30000+2];   long long skipR[5][30000+2];   long long skipV[5][30000+2];   int skip = 150;   long long skip2L[5][30000+2];   long long skip2R[5][30000+2];   long long skip2V[5][30000+2];   int skip2 = 30;   int main(){     int t_ynMSdg;     wmem = memarr;     int i;     int j;     int k;     int c;     for(i=(0);i<(5);i++){       cnt[i][0] = 1;     }     for(i=(0);i<(5);i++){       for(k=(0);k<(30000);k++){         for(j=(0);j<(min_L(k, i)+1);j++){           cnt[i][k+1] += cnt[i-j][k-j];           if(cnt[i][k+1] > 2000000000000000000LL){             cnt[i][k+1] = 2000000000000000000LL;           }         }       }     }     int KrdatlYV = rd_int();     for(t_ynMSdg=(0);t_ynMSdg<(KrdatlYV);t_ynMSdg++){       int dtiCQK_a;       rd(N);       rd(C);       rd(Q);       {         int a2conNHc;         for(a2conNHc=(0);a2conNHc<(N);a2conNHc++){           rd(A[a2conNHc]);         }       }       for(k=(0);k<(N);k++){         sz = 0;         for(i=(0);i<(C+1);i++){           if(k+i < N){             arrInsert(sz, sz, ind, i, lis, A[k+i]);           }         }         sortA_L(sz, lis, ind);         j = usz[k] = dsz[k] = 0;         for(i=(0);i<(sz);i++){           if(ind[i] == 0){             j++;             continue;           }           if(j==0){             ulis[k][usz[k]++] = ind[i];           }           if(j==1){             dlis[k][dsz[k]++] = ind[i];           }         }       }       for(k=(0);k<(N);k++){         for(c=(0);c<(C+1);c++){           long long sm = 0;           skipL[c][k] = -4611686016279904256LL;           skipR[c][k] = 4611686016279904256LL;           if(k+skip+5 >= N){             swap(skipL[c][k], skipR[c][k]);             continue;           }           for(j=(k);j<(k+skip);j++){             for(i=(0);i<(usz[j]);i++){               if(c >= ulis[j][i]){                 sm += cnt[c-ulis[j][i]][N-j-ulis[j][i]-1];               }             }             if(sm > 4611686016279904256LL){               sm = 2000000000000000000LL;             }             chmax(skipL[c][k], sm);             chmin(skipR[c][k], sm + cnt[c][N-j-1]);           }           skipV[c][k] = sm;         }       }       for(k=(0);k<(N);k++){         for(c=(0);c<(C+1);c++){           long long sm = 0;           skip2L[c][k] = -4611686016279904256LL;           skip2R[c][k] = 4611686016279904256LL;           if(k+skip2+5 >= N){             swap(skip2L[c][k], skip2R[c][k]);             continue;           }           for(j=(k);j<(k+skip2);j++){             for(i=(0);i<(usz[j]);i++){               if(c >= ulis[j][i]){                 sm += cnt[c-ulis[j][i]][N-j-ulis[j][i]-1];               }             }             if(sm > 4611686016279904256LL){               sm = 2000000000000000000LL;             }             chmax(skip2L[c][k], sm);             chmin(skip2R[c][k], sm + cnt[c][N-j-1]);           }           skip2V[c][k] = sm;         }       }       for(dtiCQK_a=(0);dtiCQK_a<(Q);dtiCQK_a++){         rd(X);X += (-1);         rd(Y);Y += (-1);         if(Y >= cnt[C][N]){           wt_L(-1);           wt_L(  n );           continue;         }         c = C;         for(k=(0);k<(N);k++){           if(skipL[c][k] <= Y  &&  Y < skipR[c][k]){             if(X < k + skip){               wt_L(A[X]);               wt_L(  n );               break;             }             Y -= skipV[c][k];             k += skip - 1;             continue;           }           if(skip2L[c][k] <= Y  &&  Y < skip2R[c][k]){             if(X < k + skip2){               wt_L(A[X]);               wt_L(  n );               break;             }             Y -= skip2V[c][k];             k += skip2 - 1;             continue;           }           for(i=(0);i<(usz[k]);i++){             if(c >= ulis[k][i]){               if(Y < cnt[c-ulis[k][i]][N-k-ulis[k][i]-1]){                 if(X <= k + ulis[k][i]){                   wt_L(A[k+ulis[k][i]-(X-k)]);                   wt_L(  n );                   goto qE8LMwYZ;                 }                 c -= ulis[k][i];                 k += ulis[k][i];                 goto lQU550vz;               }               else{                 Y -= cnt[c-ulis[k][i]][N-k-ulis[k][i]-1];               }             }           }           if(Y < cnt[c][N-k-1]){             if(X == k){               wt_L(A[k]);               wt_L(  n );               break;             }             continue;           }           else{             Y -= cnt[c][N-k-1];           }           for(i=(0);i<(dsz[k]);i++){             if(c >= dlis[k][i]){               if(Y < cnt[c-dlis[k][i]][N-k-dlis[k][i]-1]){                 if(X <= k + dlis[k][i]){                   wt_L(A[k+dlis[k][i]-(X-k)]);                   wt_L(  n );                   goto qE8LMwYZ;                 }                 c -= dlis[k][i];                 k += dlis[k][i];                 goto lQU550vz;               }               else{                 Y -= cnt[c-dlis[k][i]][N-k-dlis[k][i]-1];               }             }           }           lQU550vz:;         }         qE8LMwYZ:;       }     }     return 0;   }   // cLay version 20210103-1      // --- original code ---   // //no-unlocked   // int N, C, Q, A[3d4], X; ll Y;   // ll cnt[5][3d4+2];   // int sz, lis[5], ind[5];   // int usz[3d4+2], ulis[3d4+2][5];   // int dsz[3d4+2], dlis[3d4+2][5];   // ll skipL[5][3d4+2], skipR[5][3d4+2], skipV[5][3d4+2]; int skip = 150;   // ll skip2L[5][3d4+2], skip2R[5][3d4+2], skip2V[5][3d4+2]; int skip2 = 30;   // {   //   int i, j, k, c;   //   rep(i,5) cnt[i][0] = 1;   //   rep(i,5) rep(k,3d4) rep(j,min(k,i)+1){   //     cnt[i][k+1] += cnt[i-j][k-j];   //     if(cnt[i][k+1] > 2d18) cnt[i][k+1] = 2d18;   //   }   //   REP(rd_int()){   //     rd(N,C,Q,A(N));   //    //     rep(k,N){   //       sz = 0;   //       rep(i,C+1) if(k+i < N) arrInsert(sz, sz, ind, i, lis, A[k+i]);   //       sortA(sz, lis, ind);   //       j = usz[k] = dsz[k] = 0;   //       rep(i,sz){   //         if(ind[i] == 0) j++, continue;   //         if(j==0) ulis[k][usz[k]++] = ind[i];   //         if(j==1) dlis[k][dsz[k]++] = ind[i];   //       }   //     }   //    //     rep(k,N) rep(c,C+1){   //       ll sm = 0;   //       skipL[c][k] = -ll_inf;   //       skipR[c][k] = ll_inf;   //       if(k+skip+5 >= N) swap(skipL[c][k], skipR[c][k]), continue;   //       rep(j,k,k+skip){   //         rep(i,usz[j]) if(c >= ulis[j][i]) sm += cnt[c-ulis[j][i]][N-j-ulis[j][i]-1];   //         if(sm > ll_inf) sm = 2d18;   //         skipL[c][k] >?= sm;   //         skipR[c][k] <?= sm + cnt[c][N-j-1];   //       }   //       skipV[c][k] = sm;   //     }   //    //     rep(k,N) rep(c,C+1){   //       ll sm = 0;   //       skip2L[c][k] = -ll_inf;   //       skip2R[c][k] = ll_inf;   //       if(k+skip2+5 >= N) swap(skip2L[c][k], skip2R[c][k]), continue;   //       rep(j,k,k+skip2){   //         rep(i,usz[j]) if(c >= ulis[j][i]) sm += cnt[c-ulis[j][i]][N-j-ulis[j][i]-1];   //         if(sm > ll_inf) sm = 2d18;   //         skip2L[c][k] >?= sm;   //         skip2R[c][k] <?= sm + cnt[c][N-j-1];   //       }   //       skip2V[c][k] = sm;   //     }   //    //     rep(Q){   //       rd(X--, Y--);   //       if(Y >= cnt[C][N]) wt(-1), continue;   //       c = C;   //       rep(k,N){   //         if(skipL[c][k] <= Y < skipR[c][k]){   //           if(X < k + skip) wt(A[X]), break;   //           Y -= skipV[c][k];   //           k += skip - 1;   //           continue;   //         }   //         if(skip2L[c][k] <= Y < skip2R[c][k]){   //           if(X < k + skip2) wt(A[X]), break;   //           Y -= skip2V[c][k];   //           k += skip2 - 1;   //           continue;   //         }   //         rep(i,usz[k]) if(c >= ulis[k][i]){   //           if(Y < cnt[c-ulis[k][i]][N-k-ulis[k][i]-1]){   //             if(X <= k + ulis[k][i]) wt(A[k+ulis[k][i]-(X-k)]), break_break;   //             c -= ulis[k][i];   //             k += ulis[k][i];   //             break_continue;   //           } else {   //             Y -= cnt[c-ulis[k][i]][N-k-ulis[k][i]-1];   //           }   //         }   //         if(Y < cnt[c][N-k-1]){   //           if(X == k) wt(A[k]), break;   //           continue;   //         } else {   //           Y -= cnt[c][N-k-1];   //         }   //         rep(i,dsz[k]) if(c >= dlis[k][i]){   //           if(Y < cnt[c-dlis[k][i]][N-k-dlis[k][i]-1]){   //             if(X <= k + dlis[k][i]) wt(A[k+dlis[k][i]-(X-k)]), break_break;   //             c -= dlis[k][i];   //             k += dlis[k][i];   //             break_continue;   //           } else {   //             Y -= cnt[c-dlis[k][i]][N-k-dlis[k][i]-1];   //           }   //         }   //       }   //     }   //   }   // }   