#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1005;
const int M = 105;
struct Stu {
int id;
int scores[4];
int total;
bool admitted;
};
Stu stus[N];
int n, m, k, c;
bool compare(int cand_a, int cand_b) {
const Stu& s1 = stus[cand_a];
const Stu& s2 = stus[cand_b];
// 总分不相同按总分排序
if(s1.total != s2.total) return s1.total > s2.total;
// 第c门不为0,按第c门排序
if(c > 0 && s1.scores[c - 1] != s2.scores[c - 1]) return s1.scores[c - 1] > s2.scores[c - 1];
// 都相等,按id大小排序
return s1.id < s2.id;
}
int main() {
cin >> n >> m;
// 读入所有学生分数,计算总分
for (int i = 0; i < n; i++) {
stus[i].id = i + 1;
stus[i].total = 0;
stus[i].admitted = false;
for (int j = 0; j < 4; j++) {
cin >> stus[i].scores[j];
stus[i].total += stus[i].scores[j];
}
}
// 处理各系的要求
for (int d = 0; d < m; d++) {
cin >> k >> c;
int cand[N], count = 0;
// 收集没被录取的的学生
for (int i = 0; i < n; i++)
if (!stus[i].admitted) cand[count++] = i;
sort(cand, cand + count, compare);
// 确定实际录取人数
int actual_k = (k <= count) ? k : count;
if (actual_k > 0) {
int last_idx = cand[actual_k - 1];
int last_total = stus[last_idx].total;
int last_score = (c > 0) ? stus[last_idx].scores[c - 1] : 0;
// 检查同分情况
for (int i = actual_k; i < count; i++) {
int curr_idx = cand[i];
// 检查总分是否相同
if (stus[curr_idx].total != last_total) break;
// 如果c>0,检查第c门成绩是否相同
if (c > 0 && stus[curr_idx].scores[c - 1] != last_score) break;
actual_k++;
}
}
// 输出结果
cout << actual_k << " ";
for(int i = 0; i < actual_k; i++) {
int idx = cand[i];
stus[idx].admitted = true;
cout << stus[idx].id << " ";
}
cout << endl;
}
}