#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
struct coord{
int row,col;
friend istream &operator>>(istream &in,coord point){
in>>point.row>>point.col;
return in;
};
};
vector<pair<coord,coord>> speaker_row,speaker_col;
int maxn,maxm,num;
coord limit;
pair<coord,coord> temp;
pair<int,int> worth_row[2002],worth_col[2002];
void inputing(void){
scanf("%d %d %d %d %d",&maxn,&maxm,&limit.row,&limit.col,&num);
while(num--){
cin>>temp.first,temp.second;
if(temp.first.row==temp.second.row){
speaker_row.push_back(temp);
}else{
speaker_col.push_back(temp);
};
};
};
void earnings(void){
for(int iter=0;iter<speaker_row.size();++iter){
int line=speaker_row[iter].first.row;
++worth_col[line].first;
worth_col[line].second=line;
};
for(int iter=0;iter<speaker_col.size();++iter){
int line=speaker_col[iter].first.row;
++worth_row[line].first;
worth_row[line].second=line;
};
};
bool compare(pair<int,int> cmp1,pair<int,int> cmp2){
return cmp1.first>cmp2.first;
};
void algorithm(void){
earnings();
sort(worth_row+1,worth_row+maxn+1,compare);
sort(worth_col+1,worth_col+maxm+1,compare);
for(int iter=1;iter<=limit.row;++iter){
printf("%d ",worth_row[iter].second);
};
puts("");
for(int iter=1;iter<=limit.col;++iter){
printf("%d ",worth_col[iter].second);
};
};
int main(int argc,char **argv){
inputing();
earnings();
algorithm();
return 0;
};