#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
const int maxpro = 6;
//结构体初始化
struct student {
int id;
int scr[maxpro];///每门课程的得分情况
int tol_scr;///总分
int cnt ;///说明该考生至少提交过一题
int perfect_pro;///完美解题数
int rank_;///排名
}stu[maxn];
int problem_full[maxpro]={0};///每门课程的满分值
bool cmp(const student &a,const student &b) {
if (a.tol_scr!=b.tol_scr)
return a.tol_scr>b.tol_scr;
else if (a.perfect_pro!=b.perfect_pro)
return a.perfect_pro>b.perfect_pro;
else
return a.id<b.id;
}
/*
用户数N,问题总数K,总提交数M
*/
int main() {
int n, k, m;
scanf("%d%d%d",&n,&k,&m);
for (int i=1;i<=k;i++) {
scanf("%d",&problem_full[i]);
}
///不用非得记录考生的id,输出时,按照格式输出即可
for (int i=1;i<maxn;i++){
stu[i].id = i;
stu[i].perfect_pro=0;
stu[i].cnt=0;
stu[i].tol_scr=0;
fill(stu[i].scr,stu[i].scr+maxpro,-1);
}
for (int i=0;i<m;i++) {
int tmp,num,score;
scanf("%d%d%d",&tmp,&num,&score);
if (score==-1){///说明提交过
if(stu[tmp].scr[num]==-1)///必须得加这句,否则会覆盖之前的得分
stu[tmp].scr[num]=0;
}
else {///存在满分情况,多次提交,计算完美解题数,就不能在这里面计算
//if (problem_full[num] == score) {
// stu[tmp].perfect_pro++;
// }
if(score>stu[tmp].scr[num])///更新最大分数
stu[tmp].scr[num]=score;
stu[tmp].cnt++;
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=k;j++) {
if (stu[i].scr[j]!=-1) ///计算学生总成绩和最佳解题数
stu[i].tol_scr+=stu[i].scr[j];
if(stu[i].scr[j]==problem_full[j])///更新该学生 完美题解数
stu[i].perfect_pro++;
}
}
sort(stu+1,stu+n+1,cmp);
stu[1].rank_=1;
for (int i=2;i<=n;i++) {///计算排名
//if (stu[i].cnt){
if(stu[i].tol_scr!=stu[i- 1].tol_scr)
stu[i].rank_=i;
else
stu[i].rank_=stu[i-1].rank_;
//}
}
for (int i=1;i<=n;i++) {
if (stu[i].cnt){///学生至少提交过一次解题,可以不是满分,但不能是-1分
printf("%d %05d %d", stu[i].rank_,stu[i].id,stu[i].tol_scr);
for (int j=1;j<=k;j++) {
if (stu[i].scr[j]==-1)
printf(" -");
else
printf(" %d", stu[i].scr[j]);
}
printf("\n");
}
}
return 0;
}