#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int n, A[300100];
int ans[10100]; 
int q;
int id[40000][2], ids=1;
pair<int, int> query[10100];
pair<pair<int, int>,int> order[10100];
int SQRT_N = 550;
char S[10100][150];
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][0]--;
    }
    for(i = r1; i>r2; i--){
        if(i>0) id[A[i]+ids][0]--;
    }
    for(i = l1-1; i>=l2; i--){
        id[A[i]+ids][0]++;
    }
    for(i = r1+1; i<=r2; i++){
        id[A[i]+ids][0]++;
    }
    for(i=ids-1;i>0;i--){
        if(id[i*2][0]>id[i*2+1][0]){
            id[i][0]=id[i*2][0];
            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][0]==id[i*2+1][0]){
            id[i][0]=id[i*2+1][0];
            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][0]=id[i*2+1][0];
        	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, j, a[10100], b[10100], k;
    scanf("%d %d %d",&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++) scanf("%d",A+i);
    for(i=1;i<=k;i++) scanf("%s",S[i]);

    for(i=1;i<=q;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][0];
        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++){
    	printf("%d ",ans[i]);
    	for(j=0;j<ans1[i].size();j++) printf("%s%c",S[ans1[i][j]],(j==ans1[i].size()-1)?'\n':' ');
    }
    return 0;
}

