#include using namespace std; // std macros typedef long long ll; typedef pair pii; typedef pair pll; // dereference #define F first #define S second #define pb push_back #define mp make_pair // loops #define rep(i,n) for(int i=0;i=a;--i) #define all(X) (X).begin(), (X).end() // I/O #define sd(n) scanf("%d",&n) #define sd2(x,y) scanf("%d%d",&x,&y) #define sd3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define sll(n) scanf("%lld",&n) #define sll2(x,y) scanf("%lld%lld",&x,&y) #define sll3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z) #define ss(s) scanf("%s",s) // debug #define debug(x) cerr<<"debug->"<<#x<<"::"<0){ if(b&1) x=(x*y)%c; y=(y*y)%c; b/=2; } return x%c; } int dx[]={0,-1,0,1}; int dy[]={-1,0,1,0};//clockwise from left int dr[]={1,1,0,-1,-1,-1, 0, 1}; int dc[]={0,1,1, 1, 0,-1,-1,-1};//anticlockwise from down const int MOD = 1e9+7; int main() { ll n,k,x; sll3(n,k,x); ll ans = 0,mul = 1; PER(i,n-2,0) { ans = (ans+mul*power(k-1,i,MOD)+MOD)%MOD; mul*=-1; } if(x == 1) { if(n == 3) { ans = k-1; } else { if(n&1) ans = (ans+1+MOD)%MOD; else ans = (ans-1+MOD)%MOD; } } printf("%lld\n",ans); return 0; }