#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct school{
int quota;
int fact;
int ge;
int gi;
vector<int> admit;
};
struct student{
int id;
float ge;
float gi;
int choose[5];
};
bool cmp1(student a, student b){
return a.ge > b.ge ;
}
bool cmp2(student a, student b){
return (a.ge+a.gi)/2 > (b.ge+b.gi)/2 ;
}
int main(){
int n, m, k;
while( cin >> n >> m >> k ){
school sch[m];
student stu[n];
for(int i=0; i<m; i++){
cin >> sch[i].quota;
sch[i].fact = 0;
}
for(int i=0; i<n; i++){
cin >> stu[i].ge >> stu[i].gi;
stu[i].id = i;
for(int j=0; j<k; j++){
cin >> stu[i].choose[j];
}
}
// 稳定排序
stable_sort(stu, stu+n, cmp1);
stable_sort(stu, stu+n, cmp2);
// 分高的学生先选学校
for(int i=0; i<n; i++){
for(int j=0; j<k; j++){
if( sch[ stu[i].choose[j] ].quota > 0 ){
sch[ stu[i].choose[j] ].quota--;
sch[stu[i].choose[j]].ge = stu[i].ge;
sch[stu[i].choose[j]].gi = stu[i].gi;
sch[stu[i].choose[j]].admit.push_back(stu[i].id);
break;
}
else{
if( sch[stu[i].choose[j]].ge==stu[i].ge
&&sch[stu[i].choose[j]].gi==stu[i].gi){
sch[stu[i].choose[j]].admit.push_back(stu[i].id);
break;
}
}
}
}
// 对每个学校的录取名单进行排序
for(int i=0; i<m; i++){
int x = sch[i].admit.size();
for(int j=0; j<x-1; j++){
for(int k=0; k<x-1; k++){
if( sch[i].admit[k] > sch[i].admit[k+1]){
int temp = sch[i].admit[k];
sch[i].admit[k] = sch[i].admit[k+1];
sch[i].admit[k+1] = temp;
}
}
}
}
// 输出结果
for(int i=0; i<m; i++){
for(int j=0; j<sch[i].admit.size(); j++){
if( j == sch[i].admit.size()-1 ){
cout << sch[i].admit[j];
}
else{
cout << sch[i].admit[j] << " ";
}
}
cout << endl;
}
}
return 0;
}