#include <bits/stdc++.h>
using namespace std;
long long dp[205][205];
long long pw[205][205];
long long jc[205], bjc[205];
int mod;
long long ksm(long long a, long long b) {
  if (!b) return 1;
  long long ns = ksm(a, b >> 1);
  ns = ns * ns % mod;
  if (b & 1) ns = ns * a % mod;
  return ns;
}
int n, m, c;
long long nr[205][205], u[205][205];
void calnx(int a, int b, int tp) {
  for (int s = 0; s <= n + m; s++) {
    for (int i = 0; i <= n; i++)
      for (int j = max(0, s - i); j <= m; j++) {
        u[i][j] = 0;
        if (i + j == s) u[i][j] = dp[i][j];
      }
    for (int i = 0; i <= n; i++)
      for (int j = max(0, s - i); j <= m; j++) {
        if (i) u[i][j] += u[i - 1][j] * pw[a][m - j] % mod * pw[b][j];
        if (j) u[i][j] += u[i][j - 1] * pw[a][n - i] % mod * pw[b][i];
        u[i][j] %= mod;
      }
    for (int i = 0; i <= n; i++)
      for (int j = max(0, s - i); j <= m; j++) {
        long long kk = u[i][j] * bjc[i + j - s];
        if (tp && (i + j - s) % 2 == 1) kk *= -1;
        nr[i][j] = (nr[i][j] + kk) % mod;
        u[i][j] = 0;
      }
  }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) dp[i][j] = nr[i][j], nr[i][j] = 0;
}
int main() {
  cin >> n >> m >> c >> mod;
  jc[0] = bjc[0] = 1;
  for (int i = 1; i < 205; i++)
    jc[i] = jc[i - 1] * i % mod, bjc[i] = ksm(jc[i], mod - 2);
  for (int i = 0; i < 205; i++) {
    pw[i][0] = 1;
    for (int j = 1; j < 205; j++) pw[i][j] = pw[i][j - 1] * i % mod;
  }
  for (int i = 0; i <= 2 * c + 1; i++) {
    int nr = (i + 1) / 2;
    if (i == 0)
      dp[0][0] = 1;
    else {
      if (i % 2 == 1)
        calnx(nr, c + 1 - nr, 0);
      else
        calnx(nr, c - nr, 1);
    }
  }
  long long a1 = dp[n][m];
  a1 = a1 * jc[n] % mod * jc[m] % mod;
  if (a1 < 0) a1 += mod;
  cout << a1 << endl;
  return 0;
}
