#include <bits/stdc++.h>
using namespace std;
const long long N = 105;
long long n, m, K, M, dp[N][N][N][2], c[N][N], g1[N][N * N], g2[N][N][N];
long long ksm(long long x, long long y) {
  long long ans = 1;
  for (; y; y >>= 1, x = x * x % M)
    if (y & 1) (ans *= x) %= M;
  return ans;
}
signed main() {
  scanf("%lld%lld%lld%lld", &n, &m, &K, &M);
  c[0][0] = 1;
  for (long long i = 1; i < N; i++) {
    c[i][0] = 1;
    for (long long j = 1; j <= i; j++)
      c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % M;
  }
  for (long long i = 0; i < N; i++)
    for (long long j = 0; j < N * N; j++) g1[i][j] = ksm(i, j);
  for (long long i = 0; i < N; i++)
    for (long long j = 0; j < N; j++)
      for (long long k = 0; k < N; k++)
        g2[i][j][k] =
            ksm((ksm(i, j) - (i == 0 ? 0 : ksm(i - 1, j)) + M % M), k);
  dp[0][0][0][0] = 1;
  for (long long k = 0; k < K; k++) {
    for (long long j = 0; j <= m; j++)
      for (long long i = 0; i <= n; i++)
        for (long long p = 0; p <= n - i; p++)
          (dp[i + p][j][k][1] += dp[i][j][k][0] * c[n - i][p] % M *
                                 g1[K - k][j * p] % M * g2[k + 1][m - j][p]) %=
              M;
    for (long long j = 0; j <= m; j++)
      for (long long i = 0; i <= n; i++)
        for (long long p = 0; p <= m - j; p++)
          (dp[i][j + p][k + 1][0] += dp[i][j][k][1] * c[m - j][p] % M *
                                     g1[k + 1][(n - i) * p] % M *
                                     g2[K - k][i][p]) %= M;
  }
  printf("%lld\n", dp[n][m][K][0]);
}
