#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cctype>
using namespace std;
struct Car{
char no[10];
int time, stat;
}car[40010];
struct Rec{
int index, last;
}rec[40010];
int N, K;
int spark[90000];
bool cmp1(Car c1, Car c2){
if(strcmp(c1.no, c2.no) != 0) return strcmp(c1.no, c2.no) < 0;
if(c1.time != c2.time) return c1.time < c2.time;
return c1.stat > c2.stat;
}
bool cmp2(Rec r1, Rec r2){
if(r1.last != r2.last ) return r1.last > r2.last;
else return strcmp(car[r1.index].no, car[r2.index].no) < 0;
}
int main(){
memset(spark, 0, sizeof(spark));
int hh, mm, ss;
char temp[5];
scanf("%d %d", &N, &K);
for(int i = 0; i < N; i++){
scanf("%s %d:%d:%d %s", car[i].no, &hh, &mm, &ss, temp);
car[i].time = hh*3600 + mm*60 + ss;
if(strcmp(temp, "in") == 0) car[i].stat = 1;
else car[i].stat = -1;
}
sort(car, car+N, cmp1);
int p = 1, num = 0;
rec[0].index = 0;
rec[0].last = 0;
while(p < N){
if(strcmp(car[p-1].no, car[p].no) == 0){
if(car[p-1].stat == 1 && car[p].stat == -1){
for(int j = car[p-1].time; j < car[p].time; j++){
spark[j]++;
}
rec[num].last += car[p].time - car[p-1].time;
}
p++;
}else{
rec[++num].index = p++;
rec[num].last = 0;
}
}
sort(rec, rec+num+1, cmp2);
for(int i = 0; i < K; i++){
scanf("%d:%d:%d", &hh, &mm, &ss);
int time = hh*3600 + mm*60 + ss;
printf("%d\n", spark[time]);
}
int index = rec[0].index, last = rec[0].last;
printf("%s", car[index].no);
for(int i = 1; i <= num; i++){
index = rec[i].index;
if(rec[i].last == last) printf(" %s", car[index].no);
else break;
}
hh = last/3600; mm = (last%3600)/60;
ss = (last%3600)%60;
printf(" %02d:%02d:%02d", hh, mm, ss);
return 0;
}