#include <bits/stdc++.h>
using namespace std;
int n;
long long p;
long long a[1000005];
long long fastpow(long long a, int x) {
  if (x < 0) return 1;
  if (x == 0) return 1;
  if (x == 1) return a;
  long long tmp = fastpow(a, x >> 1);
  tmp = (tmp * tmp) % 1000000007ll;
  if (x & 1) {
    tmp = (tmp * a) % 1000000007ll;
  }
  return tmp;
}
void solve() {
  scanf("%d%lld", &n, &p);
  for (int i = 0; i < n; i++) {
    scanf("%lld", a + i);
  }
  if (p == 1) {
    printf("%d\n", n % 2);
    return;
  }
  sort(a, a + n);
  long long ans = 0;
  long long res = 0;
  int last = 0;
  for (int i = n - 1; i >= 0; i--) {
    if (i != n - 1) {
      ans *= fastpow(p, last - a[i]);
      ans %= 1000000007ll;
    }
    if (i != n - 1 && res <= 1e6 + 100) {
      for (int j = 0; j < 20 && j < last - a[i]; j++) {
        res *= p;
        if (res > 1e6 + 100) {
          res = 1e18;
          break;
        }
      }
    }
    if (res == 0) {
      ans++;
      res++;
    } else {
      ans += 1000000007ll - 1;
      res--;
    }
    ans %= 1000000007ll;
    last = a[i];
  }
  ans *= fastpow(p, last);
  printf("%lld\n", ans % 1000000007ll);
}
int main() {
  ios_base::sync_with_stdio(false);
  int T;
  scanf("%d", &T);
  while (T--) {
    solve();
  }
  return 0;
}
