#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read() {
  T f = 0, x = 0;
  char c = getchar();
  while (!isdigit(c)) f = c == '-', c = getchar();
  while (isdigit(c)) x = x * 10 + c - 48, c = getchar();
  return f ? -x : x;
}
namespace run {
const int N = 109;
int mod;
inline int add(int x, int y) { return x + y >= mod ? x - mod + y : x + y; }
int cur, pre, f[2][N][N], n, m, K, C[N][N], pw[N][N * N];
int main() {
  n = read<int>(), m = read<int>(), K = read<int>(), mod = read<int>();
  pw[0][0] = C[0][0] = 1;
  for (int i = 1; i <= max(n, m); i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = add(C[i - 1][j - 1], C[i - 1][j]);
  }
  for (int i = 1; i <= K; i++) {
    pw[i][0] = 1;
    for (int j = 1; j <= max(n, m) * max(n, m); j++)
      pw[i][j] = 1LL * pw[i][j - 1] * i % mod;
  }
  f[0][0][0] = 1;
  for (int t = 1; t <= K; t++) {
    pre = cur, cur ^= 1;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++) f[cur][i][j] = 0;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++)
        for (int k = 0; k + i <= n; k++)
          f[cur][i + k][j] =
              (1LL * f[pre][i][j] * C[n - i][k] % mod * pw[t][k * (m - j)] %
                   mod * pw[K - t + 1][k * j] +
               f[cur][i + k][j]) %
              mod;
    pre = cur, cur ^= 1;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++) f[cur][i][j] = 0;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++)
        for (int k = 0; k + j <= m; k++)
          f[cur][i][j + k] =
              (1LL * f[pre][i][j] * C[m - j][k] % mod * pw[t][k * (n - i)] %
                   mod * pw[K - t + 1][k * i] +
               f[cur][i][j + k]) %
              mod;
    pre = cur, cur ^= 1;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++) f[cur][i][j] = 0;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++)
        for (int k = 0; k + i <= n; k++) {
          if (k & 1)
            f[cur][i + k][j] =
                (1LL * (mod - f[pre][i][j]) * C[n - i][k] % mod *
                     pw[t][k * (m - j)] % mod * pw[K - t][k * j] +
                 f[cur][i + k][j]) %
                mod;
          else
            f[cur][i + k][j] =
                (1LL * f[pre][i][j] * C[n - i][k] % mod * pw[t][k * (m - j)] %
                     mod * pw[K - t][k * j] +
                 f[cur][i + k][j]) %
                mod;
        }
    pre = cur, cur ^= 1;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++) f[cur][i][j] = 0;
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++)
        for (int k = 0; k + j <= m; k++) {
          if (k & 1)
            f[cur][i][j + k] =
                (1LL * (mod - f[pre][i][j]) * C[m - j][k] % mod *
                     pw[t][k * (n - i)] % mod * pw[K - t][k * i] +
                 f[cur][i][j + k]) %
                mod;
          else
            f[cur][i][j + k] =
                (1LL * f[pre][i][j] * C[m - j][k] % mod * pw[t][k * (n - i)] %
                     mod * pw[K - t][k * i] +
                 f[cur][i][j + k]) %
                mod;
        }
  }
  printf("%d\n", f[cur][n][m]);
  return 0;
}
}  // namespace run
int main() { return run::main(); }
