
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=40005;
struct stu
{
int ge,gi;
int id;
int fs[10];
int fg;
int ra;
bool state;
} q[maxn];
struct school
{
int quota;
int ac[maxn];
int num;
int lastnum;
} w[110];
int cmp(stu a,stu b)
{
if(a.fg==b.fg)
{
return a.ge>b.ge;
}
return a.fg>b.fg;
}
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0; i<m; i++)
{
scanf("%d",&w[i].quota);
w[i].num=0;
w[i].lastnum=-1;
}
for(int i=0; i<n; i++)
{
scanf("%d%d",&q[i].ge,&q[i].gi);
for(int j=0; j<k; j++)
{
scanf("%d",&q[i].fs[j]);
}
q[i].fg=q[i].ge+q[i].gi;
q[i].id=i;
}
sort(q,q+n,cmp);
for(int i=0; i<n; i++)
{
if(i>0&&q[i].fg==q[i-1].fg&&q[i].ge==q[i-1].ge)
{
q[i].ra=q[i-1].ra;
}
else q[i].ra=i;
}
for(int j=0; j<n; j++)
{
for(int p=0; p<k; p++)
{
int dream=q[j].fs[p];
int num=w[dream].num;
int last=w[dream].lastnum;
if(num<w[dream].quota || (last!=-1&&q[j].ra==q[last].ra))
{
w[dream].ac[num]=q[j].id;
w[dream].lastnum=j;
w[dream].num++;
break;
}
}
}
for(int i=0; i<m; i++)
{
if(w[i].num==0)
{
printf("\n");
}
else
{
sort(w[i].ac,w[i].ac+w[i].num);
for(int j=0; j<w[i].num; j++)
{
printf("%d",w[i].ac[j]);
if(j!=w[i].num-1) printf(" ");
}
printf("\n");
}
}
}