#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1005;
int read() {
int x;
char c = getchar();
while (c < '0' || c > '9') c = getchar();
for (x = 0; c >= '0'&& c <= '9';c = getchar())
x = x * 10 + c - '0';
return x;
}
int n, m, k, l, d;
int map[N][N];
struct Node {
int num, id;
} h[N], z[N], ans1[N], ans2[N];
void work() {
for (int i = 1; i < n; i++) {
h[i].id = i;
for (int j = 1; j <= m; j++) {
if (map[i][j] == 0) continue;
if (map[i][j] == map[i+1][j]) h[i].num++;
}
}
for (int i = 1; i < m; i++) {
z[i].id = i;
for (int j = 1; j <= n; j++) {
if (map[j][i] == 0) continue;
if (map[j][i] == map[j][i+1]) z[i].num++;
}
}
}
bool cmp(Node x, Node y) { return x.num > y.num; }
bool cmp2(Node x, Node y) { return x.id < y.id; }
int main() {
n = read(), m = read(), k = read(), l = read(), d = read();
for (int i = 1; i <= d; i++) {
int x1, y1, x2, y2;
x1 = read(), y1 = read(), x2 = read(), y2 = read();
map[x1][y1] = i, map[x2][y2] = i;
}
work();
sort(h + 1, h + n, cmp);
sort(z + 1, z + m, cmp);
for (int i = 1; i <= k; i++) ans1[i] = h[i];
for (int i = 1; i <= l; i++) ans2[i] = z[i];
sort(ans1 + 1, ans1 + 1 + k, cmp2);
sort(ans2 + 1, ans2 + 1 + l, cmp2);
printf("%d", ans1[1].id);
for (int i = 2; i <= k; i++) printf(" %d", ans1[i].id);
printf("\n");
printf("%d", ans2[1].id);
for (int i = 2; i <= l; i++) printf(" %d", ans2[i].id);
printf("\n");
return 0;
}