#include using namespace std; typedef long long ll; int mod=1000000007; int n,k,x; ll state[100010][2]; ll f(int a,int isone){ if(a==1){ if(isone)return 1; return 0; } if(state[a][isone]!=-1)return state[a][isone]; if(isone){ return state[a][isone]=(f(a-1,0)*(k-1))%mod; } //printf("%d %d:%d\n",a,isone,((k-2)*f(a-1,0)+f(a-1,1))%mod); return state[a][isone]=((k-2)*f(a-1,0)+f(a-1,1))%mod; } ll power(int a,int b){ if(b==0)return 1; ll hi=power(a,b/2); if(b%2==0)return (hi*hi)%mod; return (hi*hi*a)%mod; } ll inverse(ll a){ return power(a,mod-2); } int main() { scanf("%d%d%d",&n,&k,&x); memset(state,-1,sizeof(state)); if(x==1){ printf("%lld",f(n,1)); } else{ printf("%lld",f(n,0)); } }