#include <bits/stdc++.h>
using namespace std;
const long MOD = 1000000007;
int n, m, k;
int pre[2001];
int find(int k) {
  if (pre[k] == k)
    return k;
  else {
    pre[k] = find(pre[k]);
    return pre[k];
  }
}
void unionSet(int a, int b) {
  int aa = find(a), bb = find(b);
  pre[aa] = bb;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; i++) pre[i] = i;
  for (int i = 0; i < n; i++) {
    if (i + k - 1 < n) {
      unionSet(i, i + k - 1);
      for (int j = 0; j < k; j++) unionSet(j + i, i + k - j - 1);
    }
  }
  int s = 0;
  for (int i = 0; i < n; i++)
    if (pre[i] == i) s++;
  long long int ans = 1;
  for (int i = 0; i < s; i++) ans = (ans * m) % MOD;
  printf("%d\n", (int)ans);
  return 0;
}
