#include <bits/stdc++.h>
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::istream& reader = std::cin;
  int n, m, k;
  reader >> n >> m >> k;
  std::vector<std::tuple<int, int, int>> pts;
  bool swaped = false;
  if (n < m) {
    std::swap(n, m);
    swaped = true;
  }
  std::vector<int> xors(n), cnt(n);
  for (int i = 0; i < k; ++i) {
    int x, y, z;
    reader >> x >> y >> z;
    --x;
    --y;
    if (swaped) std::swap(x, y);
    xors[x] ^= z == -1;
    ++cnt[x];
  }
  int p;
  reader >> p;
  if ((n - m) % 2) {
    puts("0");
    return 0;
  }
  int result = 1;
  bool empty_line = false;
  for (int i = 0; i < n; ++i) {
    if (cnt[i] == 0) {
      if (!empty_line) {
        empty_line = true;
        continue;
      }
    }
    if (cnt[i] == m && xors[i] == 0) {
      puts("0");
      return 0;
    }
    for (int j = 0; j < m - 1 - cnt[i]; ++j) {
      result += result;
      if (result >= p) result -= p;
    }
  }
  printf("%d\n", result);
}
