#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
const int maxm = 1e3 + 5;
const long long mod = 1e9 + 7;
long long quickpow(long long n, long long k, long long mod) {
  long long ans = 1;
  n = n % mod;
  while (k) {
    if (k & 1) ans = (ans * n) % mod;
    n = (n * n) % mod;
    k /= 2;
    ans %= mod;
  }
  return ans % mod;
}
long long n, m, p;
long long a[maxn], b[maxn];
int main() {
  while (~scanf("%lld %lld", &n, &p)) {
    long long sum = 0;
    for (int i = 0; i < n; i++) {
      scanf("%lld", &a[i]);
      sum += a[i];
    }
    for (int i = 0; i < n; i++) {
      b[i] = sum - a[i];
    }
    sort(b, b + n);
    long long cnt = 1;
    b[n] = -1;
    long long minn;
    for (int i = 1; i <= n; i++) {
      if (b[i] == b[i - 1])
        cnt++;
      else {
        if (cnt % p) {
          minn = b[i - 1];
          break;
        } else {
          b[i - 1]++;
          cnt /= p;
          i--;
        }
      }
    }
    long long ans = min(minn, sum);
    printf("%lld\n", quickpow(p, ans, mod));
  }
  return 0;
}
