#include<iostream> #include<string> #include<algorithm> using namespace std; const int MAXSTUDENT=1000; const int MAXPROBLEM=10; class student { public: string ID; int total; int pro_solved; bool operator<(const student &v2) const; }; bool student::operator<(const student &v2) const { if(total>v2.total||(total==v2.total&&ID<v2.ID)) return true; else return false; } int main() { int stuNumber,proNumber,scoreLine; while(cin>>stuNumber&&stuNumber) { student students[MAXSTUDENT]; for(int i=0;i<MAXSTUDENT;++i) { students[i].ID=" "; students[i].pro_solved=0; students[i].total=0; } int pointEachPro[MAXPROBLEM]; for(int i=0;i<MAXPROBLEM;++i) { pointEachPro[i]=0; } cin>>proNumber>>scoreLine; for(int ix=0;ix<proNumber;++ix) { cin>>pointEachPro[ix]; } int crosstheLine=0; for(int ix=0;ix<stuNumber;++ix) { cin>>students[crosstheLine].ID>>students[crosstheLine].pro_solved; students[crosstheLine].total=0; for(int j=0;j<students[crosstheLine].pro_solved;++j) { int whichIsSolved; cin>>whichIsSolved; students[crosstheLine].total+=pointEachPro[whichIsSolved-1]; } if(students[crosstheLine].total>=scoreLine) ++crosstheLine; } sort(students,students+crosstheLine); cout<<crosstheLine<<endl; for(int ix=0;ix<crosstheLine;++ix) cout<<students[ix].ID<<" "<<students[ix].total<<endl; } }