public static void main(String[] args) { String z = in.next(); int k = in.nextInt(); int s = in.nextInt() - 1; int l = in.nextInt(); int[] t = new int[l]; for (int i = 0; i < l; ++i) { t[i] = in.nextInt() - 1; } int[][] f = new int[z.length()][k]; for (int i = 0; i < k; ++i) { for (int j = 0; j < z.length(); ++j) { f[j][i] = in.nextInt() - 1; } } boolean[][] g = new boolean[z.length()][k]; for (int i = 0; i < k; ++i) { for (int j = 0; j < z.length(); ++j) { g[j][i] = (in.nextInt() == 0); } } DFA dfa = new DFA(z.toCharArray(), k, s, t, f, g); int n = in.nextInt(); out.println(dfa.count(n)); out.flush(); }