/*************************
题意:
此题关键在于题意和细节处理
题意:
给出每个PAT参赛者的每次提交结果
统计出排名并输出
要求:
1.按照总分从大到小排名,再按AC题目的数量从大到小排名,再按id排名
2.没有提交过,或者一次都没通过编译的,不出现在名单中。
3.没有通过编译的题认为是0分。

************************/
/***********************
注意点:
1. 注意排名的输出,总分相同,则排名相同。
2. 如果是在for循环中对那些"一次都没编译成功的人"做continue跳过操作的话
请注意排名的输出是否会出现问题。
3.如果这个人是可以出现在名单中,但是有未编译通过的题目,该题目认为是0分。
没提交的题目才认为是‘-’
4.AC题目就是分数刚好达到题目要求的满分
5.如果提交了0分,那么就是编译通过了,是一定可以出现在名单里的
*************************/
/***********************
笔记:
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<set>
#include<unordered_map>
using namespace std;
#define M 15
#define INF 0x7ffffff

struct User{
int id;
int score[M];
int sum;
int pnum;
int sloven;
};
User user[11000];

bool cmp(User a,User b){
if(a.sum > b.sum)
return true;
else if(a.sum == b.sum){
if(a.sum == 0)
return a.pnum > b.pnum;
else{
if(a.sloven > b.sloven)
return true;
else if(a.sloven == b.sloven){
return a.id < b.id;
}
else return false;
}
}
else return false;
}

int fulls[M];
int main(){
int n,k,m,i,j;
scanf("%d%d%d",&n,&k,&m);
for(i=1;i<=k;i++){
scanf("%d",&fulls[i]);
}
int id,t,score;
for(i=1;i<=n;i++){
for(j=1;j<=k;j++){
user[i].score[j] = -2; //-2指没提交过,-1指没有通过编译
}
user[i].sum = 0;
user[i].pnum = 0;
user[i].sloven = 0;
}
while(m--){
scanf("%d%d%d",&id,&t,&score);
user[id].id = id;
if(score > user[id].score[t]){
if(score >= 0 && user[id].score[t] < 0){ //之前是没提交或没编译,这次有0以上的成绩,则pnum+1
user[id].sum += score;
user[id].pnum++;
}else if(user[id].score[t] >= 0){ //之前有通过编译的成绩,这次则要加分了。
//总分增加
user[id].sum += score - user[id].score[t];
}
user[id].score[t] = score;
if(score == fulls[t])
user[id].sloven ++;
}
}
sort(user+1,user+n+1,cmp);

int lastscore = -1;
int rank = 0;
int samer;
for(i = 1;i <= n; i++){
if(user[i].pnum == 0)
continue;;
if(user[i].sum != lastscore){
rank = i ;
lastscore = user[i].sum;
}
printf("%d %05d %d", rank,user[i].id,user[i].sum);
for(j = 1;j <= k;j++){
if(user[i].score[j] == -2)
cout<<" -";
else if(user[i].score[j] == -1)
cout<<" 0";
else
printf(" %d",user[i].score[j]);
}
cout<<endl;
}

return 0;
}