#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct student
{
double GE, GI;
double final;
int ID;
vector<int> app;
};
bool greater_(const student &a, const student &b)
{
if(a.final != b.final) return a.final > b.final;
else return a.GE > b.GE;
}
struct academy
{
int num;
vector<int> take_in;
};
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, M, K;
while(cin >> N >> M >> K)
{
vector<student> vec(N);
vector<int> school(M);
for(int i = 0; i < M; i++) cin >> school[i];
for(int i = 0; i < N; i++)
{
cin >> vec[i].GE >> vec[i].GI;
vec[i].final = (vec[i].GE + vec[i].GI) / 2;
vec[i].ID = i;
int a;
for(int j = 0; j < K; j++)
{
cin >> a;
vec[i].app.push_back(a);
}
}
sort(vec.begin(), vec.end(), greater_);
vector<int> last_student(M); //上一个被接受的是第几
vector<academy> already(M);
for(int i = 0; i < M; i++) already[i].num = 0;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < K; j++)
{
int p = vec[i].ID; //ID号
int x = vec[i].app[j]; //第几志愿
int n = already[x].num; //学校已经招收的人数
if(school[x] > 0)
{
already[x].take_in.push_back(p);
already[x].num++;
school[x]--;
last_student[x] = i;
break;
}
else
{
int p1 = last_student[x];
if(vec[i].final == vec[p1].final && vec[i].GE == vec[p1].GE )
{
already[x].take_in.push_back(p);
already[x].num++;
break;
}
}
}
}
for(int i = 0; i < M; i++)
{
int num1 = already[i].num;
if(num1 == 0)
{
cout << "\n";
}
else
{
already[i].take_in.resize(num1);
sort(already[i].take_in.begin(), already[i].take_in.end());
for(int j : already[i].take_in) cout << j << " ";
cout << "\n";
}
}
}
return 0;
}