import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.NoSuchElementException; class Main { int N, M; int[] X, Y; public static void main(String[] args) { new Main().run(); } void run() { Scanner sc = new Scanner(); long N = sc.nextLong(); class S implements Comparable { int idx; String s; public S(int idx, String s) { this.idx = idx; this.s = s; } public int compareTo(S o) { return s.compareTo(o.s); }; } S[] s = new S[(int) N]; for (int i = 0; i < N; ++i) { s[i] = new S(i, sc.next()); } Arrays.sort(s); int[] rev = new int[(int) N]; for (int i = 0; i < N; ++i) { rev[s[i].idx] = i; } int[] A = new int[(int) N]; for (int i = 0; i + 1 < N; ++i) { int len = 0; while (len < Math.min(s[i].s.length(), s[i + 1].s.length()) && s[i].s.charAt(len) == s[i + 1].s.charAt(len)) { ++len; } A[i] = len; } SparseTable st = new SparseTable(A); long M = sc.nextLong(); long x = sc.nextLong(); long d = sc.nextLong(); long ans = 0; for (int k = 0; k < M; ++k) { int i = (int) (x / (N - 1)) + 1; int j = (int) (x % (N - 1)) + 1; if (i > j) { int tmp = i; i = j; j = tmp; } else { j = j + 1; } x = (x + d) % (N * (N - 1)); --i; --j; if (rev[i] > rev[j]) { int tmp = i; i = j; j = tmp; } int a = 0; while (1 << (a + 1) <= (rev[j] - rev[i])) { ++a; } ans += st.query(rev[i], rev[j]); } System.out.println(ans); } class SparseTable { int[][] t; public SparseTable(int[] A) { int N = A.length; t = new int[(int) (Math.log(N) / Math.log(2) + 1)][]; t[0] = new int[(int) N]; for (int i = 0; i < N; ++i) { t[0][i] = A[i]; } for (int i = 1; i < t.length; ++i) { // [j, j+(1<