#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct ss {int score;string ans;//答案int num;//题号int wrong_count=0;
};
bool cmp(struct ss a,struct ss b) {return a.wrong_count==b.wrong_count?a.num<b.num:a.wrong_count>b.wrong_count;
}
int main() {int n,m;cin>>n>>m;int s[n]= {0};struct ss t[m];for(int i=0; i<m; ++i) {//题目信息录入 string ans="";int score,num;cin>>score>>num;cin>>num;t[i].score=score;t[i].num=i+1;t[i].ans="";for(int j=0; j<num; ++j) {cin>>ans;t[i].ans+=ans;}}getchar();for(int i=0; i<n; ++i) {//学生题目核对 for(int k=0; k<m; ++k) {string temp;int num,flag=0;scanf("(%d",&num);for(int j=0; j<num; ++j) {cin>>temp;if(j==num-1)temp=temp.substr(0,1);if(t[k].ans.find(temp)==string::npos||num!=t[k].ans.size())flag=1;}if(!flag)s[i]+=t[k].score;else t[k].wrong_count++;getchar();}}for(int i=0; i<n; ++i)cout<<s[i]<<endl;sort(t,t+m,cmp);if(!t[0].wrong_count)cout<<"Too simple\n";else {//找错误最多题数 cout<<t[0].wrong_count<<" "<<t[0].num;for(int i=1; i<m; ++i)if(t[i].wrong_count==t[i-1].wrong_count)cout<<" "<<t[i].num;else break;}return 0;
}