#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int MAXN=40010;
const int MAXM=101;
struct stu{
int id;
int ge;
int gi;
int gei;
int a[5];
int rank;
stu(){
id=-1;
ge=0;
gi=0;
gei=0;
a[5]={-1};
rank=-1;
}
}student[MAXN];
struct sch{
int lastid;
int quota;
set<int> b;
int flag;
sch(){
quota=0;
flag=0;
lastid=-1;
}
}school[MAXM];
bool operator < (const stu& a,const stu& b){
return a.gei==b.gei?a.ge>b.ge:a.gei>b.gei;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<m;i++){
scanf("%d",&school[i].quota);
}
for(int i=0;i<n;i++){
student[i].id=i;
scanf("%d%d",&student[i].ge,&student[i].gi);
for(int j=0;j<k;j++){
scanf("%d",&student[i].a[j]);
}
student[i].gei=(student[i].ge+student[i].gi);
}
sort(student,student+n);
student[0].rank=1;
for(int i=1;i<n;i++){
if(student[i].gei==student[i-1].gei){
if(student[i].ge==student[i-1].ge)
student[i].rank=student[i-1].rank;
else{
student[i].rank=i+1;
}
}else{
student[i].rank=i+1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
int this_school=student[i].a[j];
int size=school[this_school].b.size();
if(size<school[this_school].quota||student[i].rank==(school[this_school].lastid)){
school[this_school].lastid=student[i].rank;
school[student[i].a[j]].b.insert(student[i].id);break;
}
}
}
for(int i=0;i<m;i++){
int sign=0;
for(auto it=school[i].b.begin();it!=school[i].b.end();it++){
if(sign==0){
cout<<*it;sign++;
}else{
cout<<' '<<*it;
}
}
cout<<endl;
}
return 0;
}