#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cctype>#include<cstdio>#include<ctime>#include<cmath>template<classT>inlinevoidread(T &res){char ch;while(ch =getchar(),!isdigit(ch));
res = ch ^48;while(ch =getchar(),isdigit(ch))
res = res *10+ ch -48;}constint N =505;constint M =1005;int A, n, mod, m, y[M], f[N][M];inlinevoidadd(int&x,int y){
x += y;
x >= mod ? x -= mod :0;}inlineintquick_pow(int x,int k){int res =1;while(k){if(k &1) res =1ll* res * x % mod;
x =1ll* x * x % mod; k >>=1;}return res;}inlineintLagrange(int x){if(x >=1&& x <= m)return y[x];int res =0;for(int i =1; i <= m;++i){int p = y[i], q =1;for(int j =1; j <= m;++j)if(i != j){
p =1ll* p *(x - j)% mod;
q =1ll* q *(i - j)% mod;}
p <0? p += mod :0;
q <0? q += mod :0;
res =(res +1ll* p *quick_pow(q, mod -2))% mod;}return res;}intmain(){read(A);read(n);read(mod);int res =1;for(int i =1; i <= n;++i)
res =1ll* res * i % mod;
m = n + n +1;for(int j =0; j <= m;++j)
f[0][j]=1;for(int i =1; i <= n;++i)for(int j =1; j <= m;++j)
f[i][j]=(1ll* f[i -1][j -1]* j + f[i][j -1])% mod;for(int j =1; j <= m;++j)
y[j]= f[n][j];
std::cout <<1ll* res *Lagrange(A)% mod << std::endl;}