#include <bits/stdc++.h>
using namespace std;
const int N = 1000501;
const long long mod = 1000000007ll;
const long long inf = 1000000001ll;
long long n, p;
int k[N];
int cnt[N];
long long mult(long long a, long long b) { return min(a * b, inf); }
long long binpow(long long a, long long b) {
  if (!b) return 1ll;
  if (b % 2)
    return (binpow(a, b - 1) * a) % mod;
  else
    return binpow((a * a) % mod, b / 2ll);
}
void solve() {
  cin >> n >> p;
  for (int i = 1; i <= n; i++) cin >> k[i];
  if (p > 1) {
    sort(k + 1, k + n + 1);
    long long sum = 0ll;
    vector<int> ans;
    for (int i = n; i >= 1; i--) {
      if (sum >= 1) {
        ans.push_back(-1);
        sum--;
      } else {
        ans.push_back(1);
        sum++;
      }
      if (sum) {
        if (k[i] - k[i - 1] > 30) {
          for (int j = i - 1; j >= 1; j--) {
            ans.push_back(-1);
          }
          break;
        }
        for (int j = 1; j <= k[i] - k[i - 1]; j++) {
          sum = mult(sum, p);
        }
      }
    }
    reverse(ans.begin(), ans.end());
    long long res = 0ll;
    for (int i = 0; i < n; i++) {
      res += binpow(p, k[i + 1]) * ans[i];
      res %= mod;
    }
    cout << (res + mod) % mod << '\n';
  } else {
    cout << n % 2 << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int tt;
  cin >> tt;
  while (tt--) {
    solve();
  }
  return 0;
}
