package main
import (
"bufio"
"fmt"
"os"
)
func powMod(a, e, mod int64) int64 {
a %= mod
res := int64(1 % mod)
for e > 0 {
if e&1 == 1 {
res = res * a % mod
}
a = a * a % mod
e >>= 1
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, m int
fmt.Fscan(in, &n, &m)
var k int
fmt.Fscan(in, &k)
rowCnt := make([]int, n+1)
colCnt := make([]int, m+1)
rowXor := make([]int, n+1)
colXor := make([]int, m+1)
for i := 0; i < k; i++ {
var a, b, c int
fmt.Fscan(in, &a, &b, &c)
rowCnt[a]++
colCnt[b]++
if c == -1 {
rowXor[a] ^= 1
colXor[b] ^= 1
}
}
var p int64
fmt.Fscan(in, &p)
if (n^m)&1 == 1 {
fmt.Fprintln(out, 0)
return
}
t := 0
for i := 1; i <= n; i++ {
if rowCnt[i] == m {
if rowXor[i] != 1 {
fmt.Fprintln(out, 0)
return
}
t++
}
}
for j := 1; j <= m; j++ {
if colCnt[j] == n {
if colXor[j] != 1 {
fmt.Fprintln(out, 0)
return
}
t++
}
}
exp := int64(n)*int64(m) - int64(k) - int64(n) - int64(m) + 1 + int64(t)
fmt.Fprintln(out, powMod(2, exp, p))
}