import java.io.*;
import java.util.Scanner;

public class Alien {
	static int L;
	static int D;
	static int N;
	
	static String[] dictionary;
	static String[] patterns;

	public static void main(String[] args) throws IOException {
		Scanner s = new Scanner(new BufferedReader(new FileReader("input.txt")));
		L = s.nextInt();
		D = s.nextInt();
		N = s.nextInt();
		
		dictionary = new String[D];		
		for (int i=0; i<D; i++) {
			dictionary[i] = s.next();
		}
		patterns = new String[N];
		for (int i=0; i<N; i++) {
			patterns[i] = s.next();
		}
		flags = new Boolean[D];
		// debug();
		for (int i=0; i<N; i++) {
			int K = nMatches(patterns[i]);
			System.out.println("Case #" + (i+1) + ": " + K);
		}
	}

	static int currLetter;  // numero di lettere analizzate
	static Boolean[] flags; // False se la parola corrispondente del dizionario non
		                    // corrisponde. True se la parola, fin'ora, potrebbe 
	                        // corrisponere.
	static int offset;      // posizione corrente all'interno del pattern
		
	/**
	 * @param pattern contiene il pattern da analizzare
	 * @return il numero di corrispondenze di questo pattern
	 */
	private static int nMatches(String pattern) {
		reset();
		for (currLetter = 0; currLetter < L; currLetter++) {
			for (int i = 0; i < D; ++i) {
				if (flags[i] == false) // ottimizzazione
					continue;
				if (letterMatches(pattern,dictionary[i])) {
					// non fa niente
				} else {
					flags[i] = false;
				}
			}
			if (pattern.charAt(offset) == '(') {
				for(;pattern.charAt(offset) != ')';++offset);
				offset ++; // salta la parentesi chiusa
			} else {
				offset++;
			}
		}
		return countMatches();
	}
	
	private static Boolean letterMatches(String pattern,String word) {
		if (pattern.charAt(offset) != '(') {
			return (pattern.charAt(offset) == word.charAt(currLetter));
		} else {
			int j;
			for (j=offset+1; pattern.charAt(j)!=')'; ++j) {
				if (pattern.charAt(j) == word.charAt(currLetter))
					return true;
			}
			return false;
		}
	}
	
	private static void reset() {
		for (int i=0;i<D;i++) {
			flags[i] = true;
		}
		offset = 0;
	}
	
	private static int countMatches() {
		int count = 0;
		for (int i=0;i<D;++i)
			if (flags[i]) count++;
		return count;
	}
	
	private static void debug() {
		System.out.println("L="+L+", D="+D+", N="+N);
		System.out.println("Dizionario:");
		for (int i=0;i<D;i++) {
			System.out.println(dictionary[i]);
		}
		System.out.println("Patterns:");
		for (int i=0;i<N;i++) {
			System.out.println(patterns[i]);
		}
	}
}
