//列举出所有应该分隔的通道编号,并记录这条通道能分隔出多少个说话的同学 map记录
//对map的值进行排序 借助vecor容器
//输出也要记得再排一次排序
#include <iostream>
using namespace std;
#include<vector>
#include<set>
#include<algorithm>
#include<map>
class mysort{
public:
bool operator()(pair<int,int>p1,pair<int,int>p2){
return p1.second>p2.second;
}
};
int main() {
int n,m,k,l,d;
cin>>n>>m>>k>>l>>d;
vector<vector<int>>v(d,vector<int>(4));
map<int,int>m_k;//横,次数
map<int,int>m_l;//竖,次数
for(int i=0;i<d;i++){//d行
int x,y,p,q;
cin>>x>>y>>p>>q;
v[i][0]=x;
v[i][1]=y;
v[i][2]=p;
v[i][3]=q;
}
//记录所有分隔编号 并记录这条通道能分隔出多少个说话的同学
for(int i=0;i<d;i++){
if(v[i][0]==v[i][2]){//左右说话
m_l[min(v[i][1],v[i][3])]++;
}
if(v[i][1]==v[i][3]){
m_k[min(v[i][0],v[i][2])]++;
}
}
//对map的值进行排序 借助vecor容器
vector<pair<int,int>>v_ksort;
vector<pair<int,int>>v_lsort;
for(map<int,int>::iterator it=m_k.begin();it!=m_k.end();it++){
v_ksort.push_back((*it));
}
for(map<int,int>::iterator it=m_l.begin();it!=m_l.end();it++){
v_lsort.push_back((*it));
}
sort(v_ksort.begin(),v_ksort.end(),mysort());
sort(v_lsort.begin(),v_lsort.end(),mysort());
set<int>set_k;
set<int>set_l;
for(int i=0;i<k;i++){
set_k.insert(v_ksort[i].first);
}
for(int i=0;i<l;i++){
set_l.insert(v_lsort[i].first);
}
for(auto a:set_k){
cout<<a<<" ";
}
cout<<endl;
for(auto a:set_l){
cout<<a<<" ";
}
}
// 64 位输出请用 printf("%lld")