#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T gcd(T a, T b) {
  if (!b) return a;
  return gcd(b, a % b);
}
int mod = 1000000007;
int n, m, k, half, i;
long long ans;
int cb(int n, int k) {
  int i, ret = 1;
  for (i = 1; i <= k; ++i) {
    ret *= n - k + i;
    ret /= i;
  }
  return ret % mod;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  if (m == 1) {
    printf("1\n");
    return 0;
  }
  if (k == 1) {
    ans = 1;
    for (i = 0; i < (n); ++i) {
      ans *= m;
      ans %= mod;
    }
    cout << ans << endl;
    return 0;
  }
  if (n == k) {
    half = n / 2;
    if (n % 2) ++half;
    ans = 1;
    for (i = 0; i < (half); ++i) {
      ans *= m;
      ans %= mod;
    }
    cout << ans << endl;
    return 0;
  }
  if (k > n) {
    ans = 1;
    for (i = 0; i < (n); ++i) {
      ans *= m;
      ans %= mod;
    }
    cout << ans << endl;
    return 0;
  }
  if (k % 2 == 0) {
    printf("%d\n", m);
    return 0;
  }
  printf("%d\n", m * m);
}
