#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Student{
int id;
int ge,gi,sum;
int choice[5];
int adm; // 录取号
}stu[40010];
int total[100][3]; //0录取名额 1录取总数 2 上一个录取人id
bool cmp1(Student a,Student b){
if(a.sum!=b.sum) return a.sum>b.sum;
else return a.ge>b.ge;
}
bool cmp2(Student a,Student b){
return a.id<b.id;
}
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<m;i++){
scanf("%d",&total[i][0]);
total[i][1]=0;
total[i][2]=-1;
}
for(int i=0;i<n;i++){
scanf("%d%d",&stu[i].ge,&stu[i].gi);
stu[i].sum=stu[i].ge+stu[i].gi;
stu[i].id=i;
for(int j=0;j<k;j++){
scanf("%d",&stu[i].choice[j]);
}
}
sort(stu,stu+n,cmp1);
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
if(total[stu[i].choice[j]][0]!=0){
stu[i].adm=stu[i].choice[j];
total[stu[i].choice[j]][0]--;
total[stu[i].choice[j]][1]++;
total[stu[i].choice[j]][2]=i;
break;
}else if(stu[i].sum==stu[total[stu[i].choice[j]][2]].sum && stu[i].ge==stu[total[stu[i].choice[j]][2]].ge && total[stu[i].choice[j]][2]!=-1){
stu[i].adm=stu[i].choice[j];
total[stu[i].choice[j]][1]++;
break;
}else{
stu[i].adm=-1;
}
}
}
sort(stu,stu+n,cmp2);
for(int i=0;i<m;i++){
int count=0;
for(int j=0;j<n;j++){
if(stu[j].adm==i){
printf("%d",stu[j].id);
count++;
if(count!=total[i][1]) printf(" ");
}
}
printf("\n");
}
return 0;
}