//统计每一排的对数,即拆散后可得对数。然后从大的开始取。(贪心一道)
//注意输出排数时要从小到大。
//同时注意输出时的格式。换行、空格之类的。
#include <stdio.h>
int map[2001][5];
int hang[1001]={0};
int lie[1001]={0};
int m,n,k,l,d;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int maxhpos()
{
int i;
int max=0;
int maxpos=0;
for(i=1;i<=m;i++)
if(hang[i]>max)
{
max=hang[i];
maxpos=i;
}
hang[maxpos]=0;
return maxpos;
}
int maxlpos()
{
int i;
int max=0;
int maxpos=0;
for(i=1;i<=n;i++)
if(lie[i]>max)
{
max=lie[i];
maxpos=i;
}
lie[maxpos]=0;
return maxpos;
}
int min(int a,int b)
{
if(a<b) return a;
else return b;
}
int main()
{
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
int i,r;
int chu1[1001],chu2[1001];
for(i=1;i<=d;i++)
{
scanf("%d%d%d%d",&map[i][1],&map[i][2],&map[i][3],&map[i][4]);
if(map[i][1]==map[i][3]) lie[min(map[i][2],map[i][4])]++;
if(map[i][2]==map[i][4]) hang[min(map[i][1],map[i][3])]++;
}
for(i=1;i<=k;i++)
{
chu1[i]=maxhpos();
}
for(i=1;i<=l;i++)
{
chu2[i]=maxlpos();
}
qsort(&chu1[1],k,sizeof(chu1[1]),cmp);
qsort(&chu2[1],l,sizeof(chu2[1]),cmp);
for(i=1;i<k;i++) printf("%d ",chu1[i]);printf("%d",chu1[i]);
printf("\n");
for(i=1;i<l;i++) printf("%d ",chu2[i]);printf("%d",chu2[i]);
return 0;
}