// 其实贪心策略是一种贯穿生活的思想,而非一种算法
// 我们需要统计在哪个位置添加通道时,穿过的对子数量
// 然后按照升序对两个vector<pii>数组进行排序
// 最后输出前k个,和前l个
// 大宏大宏大宏
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n,m,k,l,d;cin>>n>>m>>k>>l>>d;
unordered_map<int,int>mp1; // 纵向
unordered_map<int,int>mp2; // 横向
for (int i = 0;i < d;i++)
{
int a,b,c,e;cin>>a>>b>>c>>e;
if (a == c)
{
int r = min(b,e);
if (mp1.count(r) == 0)
mp1[r] = 1;
else
mp1[r]++;
}
if (b == e)
{
int r = min(a,c);
if (mp2.count(r) == 0)
mp2[r] = 1;
else
mp2[r] ++;
}
}
// 遍历哈希表装入vector容器
// 排序找出前k个数字
vector<pair<int,int>>v2;
for (auto &p:mp2)
{
v2.emplace_back(p.second,p.first);
}
vector<pair<int,int>>v1;
for (auto &p:mp1)
{
v1.emplace_back(p.second,p.first);
}
sort(v1.begin(),v1.end(),[](const pair<int,int>&a,const pair<int,int>&b){
return a>b;
});
sort(v2.begin(),v2.end(),[](const pair<int,int>&a,const pair<int,int>&b){
return a>b;
});
vector<int>res;
for (int i = 0;i < k;i++)
{
res.push_back(v2[i].second);
}
sort(res.begin(),res.end());
for (int i:res)cout<<i<<' ';cout<<'\n';
res.clear();
for(int i = 0;i < l;i++)
res.push_back(v1[i].second);
sort(res.begin(),res.end());
for (int i:res)cout<<i<<' ';
}
int main() {
ios::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}
// 64 位输出请用 printf("%lld")