#include using namespace std; typedef long long ll; typedef vector vl; typedef vector vvl; typedef pair pll; typedef vector vb; const ll oo = 0x3f3f3f3f3f3f3f3f; const double eps = 1e-9; #define sz(c) ll((c).size()) #define all(c) begin(c), end(c) #define FOR(i,a,b) for (ll i = (a); i < (b); i++) #define FORD(i,a,b) for (ll i = (b)-1; i >= (a); i--) #define mp make_pair #define mt make_tuple #define pb push_back #define eb emplace_back #define xx first #define yy second #define has(c,i) ((c).find(i) != end(c)) #define DBGDO(X) ({ if(1) cerr << "DBGDO: " << (#X) << " = " << (X) << endl; }) const ll MOD = 1e9 + 7; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll n, k, x; cin >> n >> k >> x; vvl dp(n,vl(2)); dp[0][0] = 1; FOR(i,1,n) { dp[i][0] = (k-1)*dp[i-1][1] % MOD; dp[i][1] = (dp[i-1][0] + (k-2)*dp[i-1][1]) % MOD; } cout << dp[n-1][x != 1] << endl; }