// author: gary #include using namespace std; #define ALL(x) (x).begin(), (x).end() #define SZ(x) ( (int) (x).size() ) #define DBG(x) do { std::cerr << #x << ": " << x << std::endl; } while (0) typedef pair pii; typedef long long ll; template bool cmax(T& a, T b) { if(a < b) { a = b; return true; } return false; } template bool cmin(T& a, T b) { if(a > b) { a = b; return true; } return false; } const int N = 1e5 + 10; const int mod = 1e9 + 7; void madd(int& a, int b) { a += b; if(a >= mod) a -= mod; } int mul(int a, int b) { return (1LL * a * b) % mod; } int mpow(int a, int n) { int r = 1; while(n > 0) { if(n & 1) r = mul(r, a); a = mul(a, a); n >>= 1; } return r; } int f[N][3]; // is_x or not int n, k, x; int main() { scanf("%d%d%d", &n, &k, &x); f[0][1] = 1; int c = k - 1 - (x != 1); for(int i = 1; i < n; i++) { // not x, not 1 madd(f[i][0], mul(c, f[i-1][1] + f[i-1][2])); if(c > 0) madd(f[i][0], mul(c - 1, f[i-1][0])); // one madd(f[i][1], f[i-1][0]); madd(f[i][1], f[i-1][2]); // x if(x != 1) { madd(f[i][2], f[i-1][0]); madd(f[i][2], f[i-1][1]); } } printf("%d\n", f[n-1][x == 1 ? 1 : 2]); return 0; }