#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
#include<string.h>
using namespace std;
int n, A[300100];
int ans[10100]; 
int q;
int id[40000], ids=1;
pair<int, int> query[10100];
pair<pair<int, int>,int> order[10100];
int SQRT_N = 550;
string S[10100];
vector<int> V[40000], ans1[10100];
void go_query(pair<int, int> pr, pair<int, int> now){
    int i, j;
    int l1 = pr.first;
    int r1 = pr.second;
    int l2 = now.first;
    int r2 = now.second;
    for(i = l1; i<l2; i++){
        if(i>0) id[A[i]+ids]--;
    }
    for(i = r1; i>r2; i--){
        if(i>0) id[A[i]+ids]--;
    }
    for(i = l1-1; i>=l2; i--){
        id[A[i]+ids]++;
    }
    for(i = r1+1; i<=r2; i++){
        id[A[i]+ids]++;
    }
    for(i=ids-1;i>0;i--){
        if(id[i*2]>id[i*2+1]){
            id[i]=id[i*2];
            V[i].clear();
            for(j=0;j<V[i*2].size();j++)V[i].push_back(V[i*2][j]);
        }else if(id[i*2]==id[i*2+1]){
            id[i]=id[i*2+1];
            V[i].clear();
            for(j=0;j<V[i*2].size();j++)V[i].push_back(V[i*2][j]);
            for(j=0;j<V[i*2+1].size();j++)V[i].push_back(V[i*2+1][j]);
        }else{
        	id[i]=id[i*2+1];
        	V[i].clear();
            for(j=0;j<V[i*2+1].size();j++)V[i].push_back(V[i*2+1][j]);
		}
    }
}
int main(){
	int I;
	for(I=1;I<21;I++){
		int i, j, a[10100], b[10100], k;
		memset(A,0,sizeof(A));
		memset(ans,0,sizeof(ans));
		ids = 1;
		memset(id,0,sizeof(id));
		for(i=0;i<10100;i++){
			query[i] ={0,0};
			order[i] ={{0,0},0};
		}
		for(i=0;i<40000;i++) V[i].clear();
		for(i=0;i<10100;i++) ans1[i].clear();
		
	    //scanf("%d %d %d",&n, &k, &q);
	    cin >> n >> k >> q;
		while(ids<=k)ids*=2;
	    for(i=ids+1;i<= k+ids;i++) V[i].push_back(i-ids);
	    for(i=1;i<=n;i++) cin>>A[i]; //scanf("%d",A+i);
	    for(i=1;i<=k;i++) cin>>S[i]; //scanf("%s",S[i]);
	
	    for(i=1;i<=q;i++){
	        cin >> a[i] >> b[i] ; //scanf("%d %d", a+i, b+i);
	        query[i]={a[i],b[i]};
	        order[i].first = {query[i].first/SQRT_N, query[i].second};
	        order[i].second = i;
	    }
	    sort(order+1,order+q+1);
	    for(i=1;i<=q;i++){
	        go_query(query[order[i-1].second],query[order[i].second]);
	        ans[order[i].second] = id[1];
	        for(j=0;j<V[1].size();j++) ans1[order[i].second].push_back(V[1][j]);
	        sort(ans1[order[i].second].begin(),ans1[order[i].second].end());
	    }
	    for(i=1;i<=q;i++){
	    	cout << ans[i] <<" ";  //printf("%d ",ans[i]);
	    	for(j=0;j<ans1[i].size()-1;j++) cout<<S[ans1[i][j]] <<" ";//printf("%s%c",S[ans1[i][j]],(j==ans1[i].size()-1)?'\n':' ');
	    	cout<<S[ans1[i][j]] <<"\n";
	    }
	}
    return 0;
}

