#include<iostream> #include<string> #include<algorithm> using namespace std; struct student{ char name[25]; int mark; }; bool cmp(student i,student b){ int j; if(i.mark==b.mark){ for(j=0;i.name[j]!='\0' || b.name[j]!='\0';j++){ if(i.name[j]!=b.name[j]) return i.name[j]<b.name[j]; } } else return i.mark>b.mark; return true; } int a[15]; // the mark of each problem int main(){ int g,n,m; int ans; //the num of pass int i; string s; while(scanf("%d",&n) && n!=0){ student stu[1005]; scanf("%d%d",&m,&g); for(i=1;i<=m;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++){ int k; //the num of solved int b; //the index of problem scanf("%s",stu[i].name); scanf("%d",&k); stu[i].mark=0; while(k--){ scanf("%d",&b); stu[i].mark+=a[b]; } } int t; sort(stu+1,stu+n+1,cmp); for(i=1;stu[i].mark>=g;i++); t=i; ans=i-1; printf("%d\n",ans); for(i=1;i<t;i++){ printf("%s %d\n",stu[i].name,stu[i].mark); } } return 0; }