#include <bits/stdc++.h>
using namespace std;
long long str[300100];
long long x, n;
long long MOD = 1000000007;
long long muti_mod(long long a, long long b, long long c) {
  a %= c;
  b %= c;
  long long ret = 0;
  while (b) {
    if (b & 1) {
      ret += a;
      if (ret >= c) ret -= c;
    }
    a <<= 1;
    if (a >= c) a -= c;
    b >>= 1;
  }
  return ret;
}
long long pow_mod(long long a, long long b, long long c) {
  long long ret = 1;
  for (a %= c; b; b >>= 1, a = muti_mod(a, a, c)) {
    if (b & 1) ret = muti_mod(ret, a, c);
  }
  return ret;
}
long long gcd(long long x, long long y) {
  if (!x || !y) return x ? x : y;
  for (long long t; t = x % y; x = y, y = t)
    ;
  return y;
}
int main() {
  int i;
  long long mod = 0, ans, k, _ans, _g;
  while (cin >> n >> x) {
    for (i = 0; i < n; i++) {
      scanf("%lld", &str[i]);
    }
    sort(str, str + n);
    mod = 0;
    for (i = 0; i < n - 1; i++) {
      mod += str[i];
    }
    ans = pow_mod(x, mod, MOD);
    k = 0;
    _g = str[n - 1];
    long long _num;
    long long _k;
    long long num;
    for (i = n - 1; i >= 0;) {
      if (_g == str[i]) {
        k++;
        i--;
      } else {
        if (k == 0 || k % x != 0) {
          break;
        } else {
          num = 0;
          _k = k;
          while (_k % x == 0) {
            num++;
            _k /= x;
          }
          if (num >= _g - str[i]) {
            _ans = pow_mod(x, _g - str[i], MOD);
            k /= _ans;
            _g = str[i];
            ans = (ans * _ans) % MOD;
          } else {
            _ans = pow_mod(x, num, MOD);
            k /= _ans;
            _g -= num;
            ans = (ans * _ans) % MOD;
          }
        }
      }
    }
    if (k > 0 && k % x == 0) {
      num = 0;
      _k = k;
      while (_k > 0 && _k % x == 0) {
        num++;
        _k /= x;
      }
      _ans = pow_mod(x, min(num, _g), MOD);
      ans = (ans * _ans) % MOD;
    }
    cout << ans << endl;
  }
  return 0;
}
