#include <bits/stdc++.h>
using namespace std;
int n, m, mod;
int g[505], sg[505];
int f[505][505], sf[505][505];
namespace usual {
int C[505][505];
int add(int ta, int tb) { return ta + tb >= mod ? ta + tb - mod : ta + tb; }
int sub(int ta, int tb) { return ta < tb ? ta - tb + mod : ta - tb; }
void make_C() {
  C[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = add(C[i - 1][j], C[i - 1][j - 1]);
  }
}
}  // namespace usual
using namespace usual;
int S1(int tn) { return 1ll * tn * (tn + 1) / 2 % mod; }
int main() {
  scanf("%d %d %d", &n, &m, &mod);
  make_C();
  g[0] = 1;
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= i; j++) {
      int tmp = 1ll * g[j - 1] * g[i - j] % mod * C[i - 1][j - 1] % mod;
      g[i] = add(g[i], 1ll * tmp * (i + 1) % mod);
      sg[i] = add(sg[i], 1ll * sg[j - 1] * g[i - j] % mod * C[i - 1][j - 1] %
                             mod * (i + 1) % mod);
      sg[i] = add(sg[i], 1ll * sg[i - j] * g[j - 1] % mod * C[i - 1][j - 1] %
                             mod * (i + 1) % mod);
      sg[i] = add(sg[i], 1ll * tmp * add(S1(i - j), S1(j - 1)) % mod);
    }
  }
  for (int i = 0; i <= n; i++) f[i][0] = 1;
  for (int i = 1; i <= n; i++) {
    if (i <= m) f[i][i] = g[i], sf[i][i] = sg[i];
    for (int j = 1; j <= min(i - 1, m); j++) {
      for (int t = i; t; t--) {
        if (i - t > j) break;
        int tmp = 1ll * g[i - t] * C[j][i - t] % mod;
        f[i][j] = add(f[i][j], 1ll * f[t - 1][j - i + t] * tmp % mod);
        sf[i][j] = add(sf[i][j], 1ll * sf[t - 1][j - i + t] * tmp % mod);
        sf[i][j] = add(sf[i][j], 1ll * f[t - 1][j - i + t] * sg[i - t] % mod *
                                     C[j][i - t] % mod);
      }
    }
  }
  printf("%d\n", sf[n][m]);
  return 0;
}
