#include<bits/stdc++.h>
typedef long long ll;
ll gi(){
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch))f^=ch=='-',ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return f?x:-x;
}
int f[310][310],sf[310][310],C[310][310];
int main(){
#ifdef XZZSB
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	int n=gi(),k=gi()+1,mod=gi();
	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]=(C[i-1][j-1]+C[i-1][j])%mod;
	}
	for(int i=1;i<=k;++i)f[1][i]=1,sf[1][i]=k-i+1;
	for(int i=2;i<=n+1;++i)
		for(int j=k;j;--j){
			for(int o=1;o<i;++o)f[i][j]=(f[i][j]+1ll*C[i-2][o-1]*f[i-o][j]%mod*sf[o][j+1])%mod;
			sf[i][j]=(f[i][j]+sf[i][j+1])%mod;
		}
	printf("%d\n",f[n+1][1]);
	return 0;
}
