import std; void read(T...)(string S, ref T args) { auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } } void main () { int N, K, Q; readln.read(N, K, Q); solve(N, K, Q); } void solve (int N, int K, int Q) { string[] A; foreach (_; 0..Q) { int query = readln.chomp.to!int; if (query == 2) { int time = 0; int correct = 0; string[] B; // クエリ処理 foreach (i; 0..6) { string t; int d; readln.read(t, d); // 問題の被りを探す bool seen = false; foreach (j; 0..N) { if (0 <= cast(int) A.length-1-j) { if (A[$-1-j] == t) { seen = true; break; } } else { break; } } if (seen) { time += min(K, d); } else { time += d; } if (60 < time) { B ~= t; } else { correct++; } } A ~= B; writeln(correct); } else { A ~= readln.chomp; } } }