import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.NoSuchElementException; public class Main { public static void main(String[] args) { new Main().run(); } void run() { FastScanner sc = new FastScanner(); int M = (int) sc.nextLong(); int N = (int) sc.nextLong(); long mulX = sc.nextLong(); long addX = sc.nextLong(); long mulY = sc.nextLong(); long addY = sc.nextLong(); long MOD = sc.nextLong(); if (!(1 <= M && M <= 1000) && (!(M <= N && N <= 10000000)) && (1 <= MOD && MOD <= 1 << 24)) throw new AssertionError(); if (!(0 <= mulX && mulX < MOD && 0 <= mulY && mulY < MOD && 0 <= addX && addX < MOD && 0 <= addY && addY < MOD)) throw new AssertionError(); int[] X = new int[M]; int[] Y = new int[M]; int[] A = new int[M]; int[] B = new int[M]; long[] z = new long[(int) MOD]; for (int i = 0; i < M; ++i) { X[i] = (int) sc.nextLong(); if (!(0 <= X[i] && X[i] < MOD)) throw new AssertionError(); } for (int i = 0; i < M; ++i) { Y[i] = (int) sc.nextLong(); if (!(0 <= Y[i] && Y[i] < MOD)) throw new AssertionError(); } for (int i = 0; i < M; ++i) { A[i] = (int) sc.nextLong(); if (!(1 <= A[i] && A[i] <= MOD)) throw new AssertionError(); } for (int i = 0; i < M; ++i) { B[i] = (int) sc.nextLong(); if (!(1 <= B[i] && B[i] <= MOD)) throw new AssertionError(); } for (int i = 0; i < M; ++i) { z[(int) X[i]] += Y[i]; } { long X_ = X[M - 1] & (MOD - 1); long Y_ = Y[M - 1] & (MOD - 1); for (int i = M; i < N; ++i) { X_ = X_ * mulX + addX & MOD - 1; Y_ = Y_ * mulY + addY & MOD - 1; z[(int) X_] += Y_; } } boolean[] isPrime = isPrime((int) MOD); for (int i = 1; i < MOD; ++i) { if (isPrime[i]) { int k = (int) (MOD - 1) / i; for (int j = k; j >= 1; --j) { z[j] += z[j * i]; } } } PrintWriter pw = new PrintWriter(System.out); long all = 0; for (int i = 0; i < M; ++i) { long v = f(A[i], z) - f(A[i] * B[i], z); all ^= v; pw.println(v); } long A_ = A[M - 1] & (MOD - 1); long B_ = B[M - 1] & (MOD - 1); for (int i = M; i < N; ++i) { A_ = ((A_ * mulX & MOD - 1) + addX + MOD - 1 & MOD - 1) + 1; B_ = ((B_ * mulY & MOD - 1) + addY + MOD - 1 & MOD - 1) + 1; long v = f(A_, z) - f(A_ * B_, z); all = all ^ v; } pw.println(all); pw.close(); } long f(long v, long[] z) { if (v >= z.length) return 0; return z[(int) v]; } boolean[] isPrime(int N) { boolean[] ret = new boolean[N + 1]; Arrays.fill(ret, true); ret[0] = ret[1] = false; for (int i = 2; i < ret.length; ++i) { if (ret[i]) { for (int j = 2 * i; j < ret.length; j += i) { ret[j] = false; } } } return ret; } class FastScanner { private final InputStream in = System.in; private final byte[] buffer = new byte[1024]; private int ptr = 0; private int buflen = 0; private boolean hasNextByte() { if (ptr < buflen) { return true; } else { ptr = 0; try { buflen = in.read(buffer); } catch (IOException e) { e.printStackTrace(); } if (buflen <= 0) { return false; } } return true; } private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1; } private boolean isPrintableChar(int c) { return 33 <= c && c <= 126; } private void skipUnprintable() { while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; } public boolean hasNext() { skipUnprintable(); return hasNextByte(); } public String next() { if (!hasNext()) throw new NoSuchElementException(); StringBuilder sb = new StringBuilder(); int b = readByte(); while (isPrintableChar(b)) { sb.appendCodePoint(b); b = readByte(); } return sb.toString(); } public long nextLong() { if (!hasNext()) throw new NoSuchElementException(); long n = 0; boolean minus = false; int b = readByte(); if (b == '-') { minus = true; b = readByte(); } if (b < '0' || '9' < b) { throw new NumberFormatException(); } while (true) { if ('0' <= b && b <= '9') { n *= 10; n += b - '0'; } else if (b == -1 || !isPrintableChar(b)) { return minus ? -n : n; } else { throw new NumberFormatException(); } b = readByte(); } } } void tr(Object... objects) { System.out.println(Arrays.deepToString(objects)); } }