#include using namespace std; long MAX = 1000000007 ; long long A[100009]; long long B[100009]; long countArray(int n, int k, int x) { if(n<2)return 0; if(n==3&&x==1){ return k-1; } if(n==3&&x!=1){ return k-2; } if(n==2 &&x==1){ return 0; } if(n==2 &&x!=1){ return 1; } return ( k*B[n-3] - 2*B[n-3] + countArray(n-2,k,x) + MAX )%MAX ; } int main() { //freopen("imput.txt","r",stdin); A[1]=1; int n; int k; int x; cin >> n >> k >> x; A[0]=B[0]=1; for (int i = 1; i <= n; ++i) { A[i]=A[i-1]*k; B[i]=B[i-1]*(k-1); A[i]%=MAX; B[i]%=MAX; } long answer = countArray(n, k, x); cout << answer << endl; return 0; }