##1236
using namespace std;
int n,m,g,tt[12];
struct node{
char name[24];
int m,sum;
}s[1003];
bool cmp(node a,node b){
if(a.sum==b.sum) return strcmp(a.name,b.name)<0;
return a.sum>b.sum;
}
int main(){
int k;
while(cin>>n>>m>>g){
if(n==0) break;
for(int i=1;i<=m;i++)
cin>>tt[i];
for(int i=1;i<=n;i++){
cin>>s[i].name>>s[i].m;
int cnt=0;
for(int j=1;j<=s[i].m;j++){
cin>>k;
cnt+=tt[k];
}
s[i].sum=cnt;
}
sort(s+1,s+1+n,cmp);
k=1;
for(int i=1;i<=n;i++){
if(s[i].sum>=g) k++;
else break;
}
/*错误代码
for(int i=1;i<=n;i++){
if(s[i].sum<g){
k=i;break;
}
}
存在n个全满足的情况,不能直接判断sum<g
*/
cout<<k-1<<endl;
if(k!=1){
for(int j=1;j<k;j++)
cout<<s[j].name<<" "<<s[j].sum<<endl;
}
}
return 0;
}