#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;
}