#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m, mod;
int C[N][N];
int way[N];
int sum[N];
int g[N][N], f[N][N];
int add(int a, int b) {
  if (a + b >= mod) return a + b - mod;
  return a + b;
}
int mul(int a, int b) { return (long long)a * b % mod; }
int get(int i) { return i * (i + 1) / 2; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> mod;
  for (int i = (0); i < (m + 1); i++) {
    C[i][0] = 1;
    for (int j = (1); j < (i + 1); j++) {
      C[i][j] = add(C[i - 1][j - 1], C[i - 1][j]);
    }
  }
  way[0] = 1;
  for (int i = (1); i < (m + 1); i++) {
    for (int j = (0); j < (i); j++) {
      way[i] = add(way[i],
                   mul(mul(i + 1, C[i - 1][j]), mul(way[j], way[i - j - 1])));
      sum[i] =
          add(sum[i],
              mul(mul(mul(add(get(j), get(i - j - 1)), way[j]), way[i - j - 1]),
                  C[i - 1][j]));
      sum[i] = add(sum[i], mul(mul(i + 1, add(mul(sum[j], way[i - j - 1]),
                                              mul(way[j], sum[i - j - 1]))),
                               C[i - 1][j]));
    }
  }
  n++;
  f[0][0] = 1;
  for (int i = (0); i < (n); i++) {
    for (int j = (0); j < (m + 1); j++) {
      for (int k = 0; j + k <= m && i + k + 1 <= n; k++) {
        f[i + k + 1][j + k] =
            add(f[i + k + 1][j + k], mul(mul(f[i][j], way[k]), C[j + k][j]));
        g[i + k + 1][j + k] = add(
            g[i + k + 1][j + k],
            mul(add(mul(f[i][j], sum[k]), mul(g[i][j], way[k])), C[j + k][j]));
      }
    }
  }
  cout << g[n][m] << "\n";
  return 0;
}
