#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
struct node
{
int id, score[6], fullmarknum, totalscore, flag;
}stu[100000];
int cmp(node n1, node n2)
{
if(n1.totalscore != n2.totalscore)
{
return n1.totalscore > n2.totalscore;
}
if(n1.fullmarknum != n2.fullmarknum)
{
return n1.fullmarknum > n2.fullmarknum;
}
return n1.id < n2.id;
}
int main()
{
int n, k, m;
scanf("%d%d%d", &n, &k, &m);
int fullmark[6], i;
for(i = 1; i <= k; i++)
{
scanf("%d", &fullmark[i]);
}
for(i = 1; i <= n; i++)
{
memset(stu[i].score, -2, sizeof(stu[i].score));
stu[i].fullmarknum = stu[i].totalscore = stu[i].flag = 0;
stu[i].id = i;
}
int index, id, score, curscore;
for(i = 1; i <= m; i++)
{
scanf("%d%d%d", &id, &index, &curscore);
score = stu[id].score[index];
if(curscore > score)
{
stu[id].score[index] = curscore;
if(curscore >= 0)
{
stu[id].flag = 1;
}
}
}
int j, sum, count;
vector<node> v;
for(i = 1; i <= n; i++)
{
if(stu[i].flag == 1)
{
sum = count = 0;
for(j = 1; j <= k; j++)
{
curscore = stu[i].score[j];
if(curscore > 0)
{
sum += curscore;
if(curscore == fullmark[j])
{
count++;
}
}
}
stu[i].fullmarknum = count;
stu[i].totalscore = sum;
v.push_back(stu[i]);
}
}
sort(v.begin(), v.end(), cmp);
int size = v.size(), rank = 1, same = 1;
for(i = 0; i < size; i++)
{
if(i == 0)
{
}
else if(v[i].totalscore == v[i - 1].totalscore)
{
same++;
}
else
{
rank += same;
same = 1;
}
printf("%d %05d %d", rank, v[i].id, v[i].totalscore);
for(j = 1; j <= k; j++)
{
score = v[i].score[j];
if(score > -2)
{
if(score == -1)
{
score = 0;
}
printf(" %d", score);
}
else
{
printf(" -");
}
}
printf("\n");
}
system("pause");
return 0;
}