#include using namespace std; typedef long long ll; typedef pair l_l; typedef pair i_i; #define EPS (1e-7) #define INF (1e9) #define PI (acos(-1)) const ll mod = 1000000007; int main() { //cout.precision(10); cin.tie(0); ios::sync_with_stdio(false); ll N, B; cin >> N >> B; map mp; vector S(N); for(int i = 0; i < N; i++) { cin >> S[i]; mp[S[i]]++; } sort(S.begin(), S.end(), greater()); S.erase(unique(S.begin(), S.end()), S.end()); ll SIZE = S.size(); vector f(S.size() + 1); ll now = 0; for(ll i = 0; i < SIZE; i++) { ll NEXT = now + mp[S[i]]; f[i+1].first = 1; for(ll j = now; j < NEXT; j++) { f[i+1].first *= j; f[i+1].first %= mod; } f[i+1].second = 1; for(ll j = now + 1; j <= NEXT; j++) { f[i+1].second *= j; f[i+1].second %= mod; } f[i+1].second -= f[i+1].first; f[i+1].second %= mod; now = NEXT; swap(f[i+1].first, f[i+1].second); //cerr << f[i+1].first << " " << f[i+1].second << endl; } ll sum[200500]; ll sumafter[200500]; sum[0] = 1; for(ll i = 1; i <= SIZE; i++) { sum[i] = sum[i-1] * ((f[i].first * B + f[i].second) % mod); sum[i] %= mod; } sumafter[SIZE+1] = 1; for(ll i = SIZE; i >= 1; i--) { sumafter[i] = sumafter[i+1] * ((f[i].first * B + f[i].second) % mod) % mod; } ll ans = 0; for(ll i = 1; i <= SIZE; i++) { ans += (sum[i-1] * sumafter[i+1] % mod) * f[i].first % mod; } ans *= B; ans %= mod; cout << ans << endl; return 0; }