#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int inf = (1 << 31) - 10;
const int maxn = 10010;
struct Node{
int arr, need, start;
int tag, stat;
}node[maxn];
struct Table{
int open;
int useNum, tag;
}table[110];
int N, K, M;
int L = 8 * 3600, R = 21 * 3600;
bool cmp1(Node n1, Node n2){
return n1.arr < n2.arr;
}
bool cmp2(Node n1, Node n2){
return n1.start < n2.start;
}
int nextVip(int idx){
idx++;
while(idx < N && node[idx].tag == 0)
idx++;
return idx;
}
void allcTable(int idx, int no){
if(table[idx].open <= node[no].arr){
node[no].start = node[no].arr;
table[idx].open = node[no].arr + node[no].need;
}else{
node[no].start = table[idx].open;
table[idx].open += node[no].need;
}
node[no].stat = 1;
table[idx].useNum++;
}
int main(){
scanf("%d", &N);
int tt, hh, mm, ss, need, tag;
for(int i = 0; i < N; i++){
scanf("%d:%d:%d %d %d", &hh, &mm, &ss, &need, &tag);
tt = hh * 3600 + mm * 60 + ss;
node[i].arr = tt;
node[i].need = min(need * 60, 2 * 3600);
node[i].tag = tag;
node[i].start = inf;
node[i].stat = 0;
}
sort(node, node + N, cmp1);
for(int i = 1; i <= K; i++){
table[i].open = L;
table[i].useNum = 0;
table[i].tag = 0;
}
scanf("%d %d", &K, &M);
int x;
for(int i = 0; i < M; i++){
scanf("%d", &x);
table[x].tag = 1;
}
int vipNo = nextVip(-1);
for(int i = 0; i < N; i++){
if(node[i].stat == 1) continue;
if(node[i].arr >= R) break;
int minOpen = inf, idx = 1;
int minVipOpen = inf, v = 0;
for(int j = 1; j <= K; j++){
if(minOpen > table[j].open){
minOpen = table[j].open;
idx = j;
}
if(table[j].tag == 1 && minVipOpen > table[j].open){
minVipOpen = table[j].open;
v = j;
}
}
if(table[idx].open >= R) break;
if(node[i].tag == 1){
if(v != 0 && table[v].open <= node[i].arr){
allcTable(v, i);
}else{
allcTable(idx, i);
}
vipNo = nextVip(i);
}else{
if(table[idx].tag == 1 && vipNo < N && node[vipNo].arr <= table[idx].open){
allcTable(idx, vipNo);
vipNo = nextVip(vipNo);
i--;
}else{
allcTable(idx, i);
}
}
}
sort(node, node + N, cmp2);
int arr, st;
for(int i = 0; i < N; i++){
if(node[i].stat == 0) continue;
arr = node[i].arr;
st = node[i].start;
printf("%02d:%02d:%02d ", arr/3600, (arr%3600)/60, (arr%3600)%60);
printf("%02d:%02d:%02d ", st/3600, (st%3600)/60, (st%3600)%60);
printf("%.0f\n", round((st - arr) / 60.0));
}
for(int i = 1; i <= K; i++){
printf("%d", table[i].useNum);
if(i < K) putchar(' ');
}
return 0;
}