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

// 定义结构体pa,用于存储每一组交头接耳的两个相邻位置坐标
struct pa{
    ll x;  // 第一个位置的行号
    ll y;  // 第一个位置的列号
    ll p;  // 第二个位置的行号
    ll q;  // 第二个位置的列号
};

// 定义PII类型,first存储间隔的交头接耳次数,second存储间隔的编号
using PII=pair<ll,ll>;
const ll N=2e3+5;
pa a[N];          // 存储d组交头接耳的位置数据
PII al[1005];     // al[j]存储第j个列间隔的(次数, 编号)
PII ak[1005];     // ak[i]存储第i个行间隔的(次数, 编号)

int main() {
    // n:教室的行数,m:教室的列数,k:需要选择的行间隔数量
    // l:需要选择的列间隔数量,d:交头接耳的总对数
    ll n,m,k,l,d;
    cin>>n>>m>>k>>l>>d;
    ll cntk=0;     // 记录已选择的行间隔数量
    ll cntl=0;     // 记录已选择的列间隔数量

    // 步骤1:遍历所有交头接耳对,统计每个行/列间隔的交头接耳次数
    for(ll i=1;i<=d;i++){
        // 输入一组交头接耳的两个相邻位置坐标
        cin>>a[i].x>>a[i].y>>a[i].p>>a[i].q;
        
        // 情况1:x==p,说明是同一行左右相邻,对应列间隔
        if(a[i].x==a[i].p){
            // 若该列间隔还未初始化编号,则赋值间隔编号
            if(!al[min(a[i].y,a[i].q)].first){
                al[min(a[i].y,a[i].q)].second=min(a[i].y,a[i].q);
            }
            // 该列间隔的交头接耳次数加1
            al[min(a[i].y,a[i].q)].first++;
        }
        // 情况2:y==q,说明是同一列上下相邻,对应行间隔
        else if(a[i].y==a[i].q){
            // 若该行间隔还未初始化编号,则赋值间隔编号
            if(!ak[min(a[i].x,a[i].p)].first){
                ak[min(a[i].x,a[i].p)].second=min(a[i].x,a[i].p);
            }
            // 该行间隔的交头接耳次数加1
            ak[min(a[i].x,a[i].p)].first++;
        }
    }

    // 步骤2:对行间隔数组按「次数降序、编号升序」排序,优先选次数多的间隔
    sort(ak + 1, ak + n, [](PII a, PII b) {
        if (a.first != b.first) return a.first > b.first;
        return a.second < b.second;
    });
    // 步骤3:对列间隔数组按「次数降序、编号升序」排序
    sort(al + 1, al + m, [](PII a, PII b) {
        if (a.first != b.first) return a.first > b.first;
        return a.second < b.second;
    });

    // 步骤4:收集前k个行间隔和前l个列间隔的编号
    vector<ll>resk,resl;
    for(ll i=1;i<=n;i++){
        if(cntk==k)break;    // 选够k个行间隔则停止
        resk.push_back(ak[i].second); // 记录选中的行间隔编号
        cntk++;
    }
    for(ll i=1;i<=m;i++){
       if(cntl==l)break;     // 选够l个列间隔则停止
        resl.push_back(al[i].second); // 记录选中的列间隔编号
        cntl++;
    }

    // 步骤5:将选中的间隔编号按升序排序,满足题目输出顺序要求
    sort(resk.begin(),resk.end());
    sort(resl.begin(),resl.end());

    // 步骤6:输出排序后的行间隔编号
    for(auto t:resk){
        cout<<t<<" ";
    }
    cout<<endl;
    // 步骤7:输出排序后的列间隔编号
    for(auto t:resl){
        cout<<t<<" ";
    }
    return 0;
}