#include <bits/stdc++.h>
using namespace std;
int C[1000][1000];
long long int dp[501], ways[501];
long long int dp2[501][501], ways2[501][501];
int main() {
  int n, m, p;
  cin >> n >> m >> p;
  int i, j, k;
  for (i = 0; i < 1000; i++) {
    C[i][0] = 1;
    for (j = 1; j <= i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % p;
  }
  dp[0] = 0, ways[0] = 1;
  for (i = 1; i <= n; i++) {
    for (j = 0; j < i; j++) {
      long long int c =
          ((((long long int)ways[j] * ways[i - j - 1]) % p) * C[i - 1][j]) % p;
      ways[i] += c, ways[i] %= p;
      dp[i] += c * (j * (j + 1) / 2 + (i - j - 1) * (i - j) / 2);
      dp[i] +=
          (((((long long int)dp[j] * ways[i - j - 1]) % p) * C[i - 1][j]) % p) *
          (i + 1);
      dp[i] +=
          (((((long long int)dp[i - j - 1] * ways[j]) % p) * C[i - 1][j]) % p) *
          (i + 1);
      dp[i] %= p;
    }
    ways[i] *= i + 1, ways[i] %= p;
  }
  ways2[0][0] = 1;
  for (i = 1; i <= n; i++) {
    for (j = 0; j <= min(i, m); j++) {
      for (k = 0; k <= j; k++) {
        if (k == i) {
          dp2[i][j] += dp[k], ways2[i][j] += ways[k];
          dp2[i][j] %= p, ways2[i][j] %= p;
        } else {
          long long int c =
              ((((long long int)ways[k] * ways2[i - k - 1][j - k]) % p) *
               C[j][k]) %
              p;
          ways2[i][j] += c, ways2[i][j] %= p;
          dp2[i][j] += ((((long long int)dp2[i - k - 1][j - k] * ways[k]) % p) *
                        C[j][k]) %
                       p;
          dp2[i][j] += ((((long long int)dp[k] * ways2[i - k - 1][j - k]) % p) *
                        C[j][k]) %
                       p;
          dp2[i][j] %= p;
        }
      }
    }
  }
  cout << dp2[n][m] << endl;
  return 0;
}
