//列举出所有应该分隔的通道编号,并记录这条通道能分隔出多少个说话的同学 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")