#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int n;//考生人数
int m;//考题数
int G;//分数线
int *p;
struct node{
string str;
int sum;
int num;
}student[1000];
bool cmp(node a, node b)//按照分数高低排序如果分数相同则按照学号升序 目前还没搞明白 ?
{
if (a.num == b.num)
return a.str < b.str;
else return a.sum > b.sum;
}
int main()
{
while (cin >> n && n != 0)
{
cin >> m>>G;
p = new int[m];
int i;
for (i = 0; i < m; i++)//读入每一题的分值
{
cin >> p[i];
}
for (i = 0; i < n; i++)//读入n个学生的分数
{
cin >> student[i].str;
cin >> student[i].num;
student[i].sum = 0;
int j, temp;
j = student[i].num;
while (j--)
{
cin >> temp;
student[i].sum += p[temp-1];
}
}
//对学生分数结构体进行排序
sort(student, student + n, cmp);
for (i = 0; i < n; i++)
{
if (student[i].sum > G)
{
cout << student[i].str << " " << student[i].sum << endl;
}
}
}
system("pause");
return 0;
}