#include<cstdio>
#define int long long
#define mod 1000000007
int plan[404],frac[404],invf[404];
inline int power(int first,int second){
int result=1;
while(second){
if(second&1){
(result*=first)%=mod;
};
(first*=first)%=mod;
second>>=1;
};
return result;
};
inline int inv(int number){
return power(number,mod-2);
};
inline int partly(int first,int second){
return frac[first]*invf[second]%mod*invf[first-second]%mod;
};
signed main(signed argc,char **argv){
int maxn,maxm,type;
scanf("%lld %lld %lld",&maxn,&maxm,&type);
frac[0]=1;
for(int iter=1;iter<=400;++iter){
frac[iter]=frac[iter-1]*iter%mod;
};
invf[400]=inv(frac[400]);
for(int iter=399;iter>=0;--iter){
invf[iter]=invf[iter+1]*(iter+1)%mod;
};
for(int first=1;first<=type;++first){
int count=0,factor=1;
for(int second=maxm;second>=1;--second){
(((count+=power(-1,second)*(power(factor-1,maxn)*partly(maxn,second)%mod))%=mod)+=mod)%=mod;
(factor*=(first+1))%=mod;
};
plan[first]=((power(power(first+1,maxm)-1,maxn)-count)%mod+mod)%mod;
};
int valid=plan[type],invalid=0;
for(int iter=1;iter<=type;++iter){
(((invalid+=power(-1,iter-1)*(plan[type-iter]*partly(type,iter)%mod))%=mod)+=mod)%=mod;
};
printf("%lld",((valid-invalid)%mod+mod)%mod);
return 0;
};