#include using namespace std; #define ll long long const int mod = 1e9 + 7; ll M[100005][3],T[100005][2],n,k,x; ll f(int i, int h){ if(i == n) return h != 2; ll &r = M[i][h]; if(r != -1) return r; r = 0; if(h == 1) r = ( r + (k-2) * f(i+1,0) + f(i+1,2) ) % mod; if(h == 0) r = ( r + (k-3) * f(i+1,0) + f(i+1,1) + f(i+1,2) ) % mod; if(h == 2) r = ( r + (k-2) * f(i+1,0) + f(i+1,1) ) % mod; return r; } ll g(int i, int h){ if(i == n) return h != 1; ll &r = T[i][h]; if(r != -1) return r; r = 0; if(h == 1) r = ( r + (k-1) * g(i+1,0) ) % mod; if(h == 0) r = ( r + (k-2) * g(i+1,0) + g(i+1,1) ) % mod; return r; } int main() { cin >> n >> k >> x; memset(M, -1, sizeof M); memset(T, -1, sizeof T); if(x > 1) cout << (f(2,1) + mod) % mod; else cout << g(2,1); }