package main import ( "fmt" "bufio" "os" "sort" ) func modpow(x int, n int, m int) int { var ret int = 1 for n > 0 { if (n & 1) != 0 { ret = ret * x % m } x = x * x % m n >>= 1 } return ret } func Min(a int, b int) int { if a <= b { return a } else { return b } } func Max(a int, b int) int { if a >= b { return a } else { return b } } func main() { r := bufio.NewReader(os.Stdin) w := bufio.NewWriter(os.Stdout) defer w.Flush() var N, K, M int fmt.Fscan(r, &N, &K, &M) P := make([]int, N) for i := 0; i < N; i++ { var x int fmt.Fscan(r, &x) P[i] = x } sort.Ints(P) E := make([]int, N) for i := 0; i < N; i++ { var x int fmt.Fscan(r, &x) E[i] = x } sort.Ints(E) A := make([]int, N) for i := 0; i < N; i++ { var x int fmt.Fscan(r, &x) A[i] = x } sort.Ints(A) H := make([]int, N) for i := 0; i < N; i++ { var x int fmt.Fscan(r, &x) H[i] = x } sort.Ints(H) D := 0 min := 0 max := 1 for i := 0; i < N; i++ { p := P[i] e := E[i] min = Min(p, e) max = Max(p, e) a := A[i] h := H[i] min = Min(min, Min(a, h)) max = Max(max, Max(a, h)) D = (D + modpow(max - min, K, M)) % M } fmt.Fprintln(w, D) }