#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
struct node {
int index, ct;
bool operator < (const node & a) const {
// if(ct == a.ct) return index < a.index; 好奇这样直接排序为啥不是正确答案
return ct > a.ct;
};
};
const int maxn = 2005;
int M, N, K, L, D; // M行N列 K条横向 L条纵向 D对同学
int x[maxn], y[maxn], p[maxn], q[maxn];
int main() {
cin >> M >> N >> K >> L >> D;
vector<node> row;
vector<node> col;
unordered_map<int, int> mp1, mp2;
for(int i = 0; i < D; i++) {
cin >> x[i] >> y[i] >> p[i] >> q[i];
if(x[i] == p[i]) {
mp2[min(y[i], q[i])]++;
} else if(y[i] == q[i]) {
mp1[min(x[i], p[i])]++;
}
}
for(auto it : mp1) row.push_back({it.first, it.second});
for(auto it : mp2) col.push_back({it.first, it.second});
sort(row.begin(), row.end());
sort(col.begin(), col.end());
vector<int> ans;
// for(int i = 0; i < K; i++) cout << row[i].index << " ";
for(int i = 0; i < K; i++) {
ans.push_back(row[i].index);
}
sort(ans.begin(), ans.end());
for(int i : ans) cout << i << " ";
cout << endl;
ans.clear();
// for(int i = 0; i < K; i++) cout << col[i].index << " ";
for(int i = 0; i < L; i++) {
ans.push_back(col[i].index);
}
sort(ans.begin(), ans.end());
for(int i : ans) cout << i << " ";
cout << endl;
return 0;
}