#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
bool flag[2003];
int coun;
int n, m, k;
void dfs(int x) {
  int i;
  flag[x] = true;
  for (i = 0; i < g[x].size(); i++)
    if (!flag[g[x][i]]) dfs(g[x][i]);
}
int main() {
  int i, j;
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  g.resize(n);
  for (j = k; j > 1; j -= 2)
    for (i = (k - j) / 2; i + j - 1 < n - (k - j) / 2; i++) {
      g[i].push_back(i + j - 1);
      g[i + j - 1].push_back(i);
    }
  for (i = 0; i < n; i++)
    if (!flag[i]) {
      dfs(i);
      coun++;
    }
  long long res = 1;
  for (i = 0; i < coun; i++) {
    res *= m;
    res %= 1000000007;
  }
  printf("%I64d\n", res);
  return 0;
}
