#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int q[110];
struct student{
int gi,ge,idd;
int ga;
int r;
vector<int> c;
}stu[40010];
vector <int> sch[110];
int scr[110];
bool cmp(student a,student b)
{
if(a.ga != b.ga) return a.ga > b.ga;
else return a.ge > b.ge;
}
int main()
{
int n,m,k,u;
scanf("%d %d %d",&n,&m,&k);
for(int i = 0; i < m; i++)
{
scanf("%d",&q[i]);
}
for(int i = 0; i < n; i++)
{
scanf("%d %d",&stu[i].ge,&stu[i].gi);
stu[i].idd = i;
stu[i].ga = (stu[i].ge + stu[i].gi) / 2;
for(int j = 0; j < k; j++)
{
scanf("%d",&u);
stu[i].c.push_back(u);
}
}
sort(stu,stu+n,cmp);
stu[0].r = 1;
for(int i = 1; i < n; i++)
{
if(stu[i].ga == stu[i-1].ga && stu[i].ge == stu[i-1].ge)
stu[i].r = stu[i-1].r;
else stu[i].r = i + 1;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < stu[i].c.size(); j++)
{
int id = stu[i].c[j];
if(q[id] > 0)
{
q[id]--;
sch[id].push_back(stu[i].idd);
scr[id] = stu[i].r;
break;
}
else
{
if(q[id] == 0 && stu[i].r == scr[id])
{
sch[id].push_back(stu[i].idd);
break;
}
}
}
}
for(int i = 0; i < m; i++)
{
sort(sch[i].begin(),sch[i].end());
int si = sch[i].size();
if(si == 0)
{
printf("\n");
continue;
}
for(int j = 0; j < si; j++)
{
if(j != 0) printf(" ");
printf("%d",sch[i][j]);
}
printf("\n");
}
return 0;
}