2476 {
2477 int n;
2478 int m;
2479 cin >> n >> m;
2480 unordered_set<string> items;
2481 int stu_cnt = 0;
2482 int item_cnt = 0;
2483 while(m-- != 0) {
2484 string item;
2485 cin >> item;
2486 items.insert(item);
2487 }
2488 for(int i = 0; i < n; i++) {
2489 string name;
2490 int k;
2491 cin >> name >> k;
2492 vector<string> vec;
2493 for(int j = 0; j < k; j++) {
2494 string item;
2495 cin >> item;
2496 if(items.contains(item)) {
2497 vec.push_back(item);
2498 }
2499 }
2500 item_cnt += vec.size();
2501 if(!vec.empty()) {
2502 stu_cnt++;
2503 cout << name << ':';
2504 for(const auto &item: vec) {
2505 cout << ' ' << item;
2506 }
2507 cout << endl;
2508 }
2509 }
2510 cout << stu_cnt << ' ' << item_cnt;
2511 return 0;
2512 }