#include<iostream>
#include<algorithm>
using namespace std;
typedef struct mtpj{
  int No,time,ACcnt,WAcnt[11];
  bool AC[11];
  static bool comp(const mtpj& hm,const mtpj& hmhm){
    if(hm.ACcnt!=hmhm.ACcnt) return hm.ACcnt>hmhm.ACcnt;
    if(hm.time!=hmhm.time) return hm.time<hmhm.time;
    return hm.No>hmhm.No;
  }
}P;
P p[50];
int main(){
  int M,T,P,R;
  int m,t,q,J;
  int TEcnt;
  while(cin >> M >> T >> P >> R && M|T|P|R){
    TEcnt = 0;
    for(int i=1;i<=T;i++){
      p[i].time=p[i].ACcnt=0,p[i].No=i;
      for(int j=1;j<=10;j++) p[i].WAcnt[j]=0,p[i].AC[j]=false;
    }

    for(int i=0;i<R;i++){
      cin >> m >> t >> q >> J;
      if(p[t].AC[q])continue;
      if(J==0){ //AC
	p[t].AC[q] = true;
	p[t].ACcnt++;
	p[t].time += p[t].WAcnt[q]*20 + m;
      }else p[t].WAcnt[q]++; //WA
    }
    sort(p+1,p+T+1,mtpj::comp);
    for(int i=1;i<=T;i++){
      if(p[i-1].time==p[i].time && p[i-1].ACcnt==p[i].ACcnt&&i!=1){
	cout << "=";
      }else if(i!=1){
	cout << ",";
      }
      cout << p[i].No;
    }
    cout << endl;
  }
}