#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int g, p, k; // g 竞赛次数, p 竞赛人数, k 积分规则数
while (cin >> g >> p, g + p) { // 先输入 g, p, 循环能否继续根据 g + p 的值
int ends[110][110]; // ends[i] 表示第 i 名的是哪个选手
for (int i = 1; i <= g; i++) { // 每场竞赛 p 名选手冲向终点的先后顺序
for (int j = 1; j <= p; j++) {
int race;
cin >> race;
ends[i][race] = j; // 设置这场竞赛第 race 是第几个车手
}
}
cin >> k; // k 个积分规则
while (k--) { // 循环做 k 次积分规则下的冠军
int points[110]{}, stds[110], m; // 1~100 车手的积分,积分规则,前 m 名才有
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> stds[i]; // 输入到积分规则标准里头
}
int MX = 0; // 最高积分
for (int i = 1; i <= g; i++) { // 总共进行了 k 场,所有车手的积分累加到 points 数组中
for (int j = 1; j <= m; j++) { // 只有前 m 名才有分数
points[ends[i][j]] += stds[j]; // 获得第几名,得到第几名的分值
}
}
for (int i = 1; i <= p; i++) {
MX = max(MX, points[i]); // 获取最大积分值
}
int ot = 0;
for (int i = 1; i <= p; i++) { // 把每个车手的积分判断,如果和 MX 相同
if (points[i] == MX) { // 输出车手编号
if (ot++ == 0) cout << i;
else cout << " " << i;
}
}
cout << "\n";
}
}
return 0;
}