#include <iostream>
#define N 2002
using namespace std;
struct team{
  int tnum;
  int correct;
  int time;
};
int main(){
  int m,t,p,r,im[N],it[N],ip[N],ij[N],incorrect,i,j;
  struct team data[51];
  while(1){
    cin >> m >> t >> p >> r;
    if(m==0&&t==0&&p==0&&r==0) break;
    for(i=0;i<r;i++) cin >> im[i] >> it[i] >> ip[i] >> ij[i];
    for(i=1;i<=t;i++){
      data[i].tnum=i;
      data[i].correct=0;
      data[i].time=0;
    }
    for(i=0;i<r;i++){
      if(ij[i]==0){
	data[it[i]].correct++;
      	incorrect=0;
	for(j=0;j<i;j++){
	  if(it[i]==it[j]&&ip[i]==ip[j]) incorrect++;
	}
	data[it[i]].time=data[it[i]].time+incorrect*20+im[i];
      }
    }
    for(i=0;i<=t;i++){
      for(j=2;j<=t;j++){
	if(data[j].tnum>data[j-1].tnum) swap(data[j],data[j-1]);
      }
    }
    for(i=0;i<=t;i++){
      for(j=2;j<=t;j++){
	if(data[j].time<data[j-1].time) swap(data[j],data[j-1]);
      }
    }
    for(i=0;i<=t;i++){
      for(j=2;j<=t;j++){
	if(data[j].correct>data[j-1].correct) swap(data[j],data[j-1]);
      }
    }
    for(i=1;i<t;i++){
      cout << data[i].tnum;
      if(data[i].correct==data[i+1].correct&&data[i].time==data[i+1].time)
	cout << '=';
      else cout << ',';
    }
    cout << data[t].tnum;
    cout << endl;
  }
  return 0;
}