#include<bits/stdc++.h>
using namespace std;

vector<int>x1;
vector<int>x2;
vector<int>yy1;
vector<int>yy2;
vector<pair<int, int>> row_info;
vector<pair<int, int>> col_info;

void solve(){
    int n,m,k,l,d;
    cin>>n>>m>>k>>l>>d;
    row_info.resize(n+1);
    col_info.resize(m+1);
    for(int i=0;i<=n;i++){
        row_info[i] = {0, i};
    }
    for(int j=0;j<=m;j++){
        col_info[j] = {0, j};
    }
    x1.resize(d);
    yy1.resize(d);
    x2.resize(d);
    yy2.resize(d);

    for(int i=0;i<d;i++){
        cin>>x1[i]>>yy1[i]>>x2[i]>>yy2[i];
    }

    for(int i=0;i<d;i++){
        if(x1[i]==x2[i]){
            int min_col = min(yy1[i], yy2[i]);
            col_info[min_col].first++;
        }
        else if(yy1[i]==yy2[i]){
            int min_row = min(x1[i], x2[i]);
            row_info[min_row].first++;
        }
    }

    sort(row_info.begin(), row_info.end(), [](const pair<int,int>& a, const pair<int,int>& b){
        if(a.first != b.first) return a.first > b.first;
        return a.second < b.second;
    });
    sort(col_info.begin(), col_info.end(), [](const pair<int,int>& a, const pair<int,int>& b){
        if(a.first != b.first) return a.first > b.first;
        return a.second < b.second;
    });
    vector<int>row;
    vector<int>column;
    for(int i=0;i<k;i++){
        row.push_back(row_info[i].second);
    }
    for(int j=0;j<l;j++){
        column.push_back(col_info[j].second);
    }
    sort(row.begin(),row.end());
    sort(column.begin(),column.end());
    for(int i=0;i<k;i++){
        cout<<row[i]<<" ";
    }
    cout<<endl;
    for(int j=0;j<l;j++){
        cout<<column[j]<<" ";
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    solve();
    return 0;
}

菜的没边了,只能想出来这种方法