#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\n';
#define SAY(X) cout << (X) << '\n';
#else
#define DBG(X)
#define SAY(X)
#endif

#define M_PI       3.14159265358979323846

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll  LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num)
{
    char buffer[4];
    std::snprintf(buffer, sizeof(buffer), "%03d", num);
    return buffer;
}

inline ll randint(ll a, ll b) { ll w = (_g() << 31LL) ^ _g(); return a + w % (b - a + 1); }
inline void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); };
template<typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template<typename T, typename S> inline ostream& operator<<(ostream& os, const pair<T, S> p) { cout << "[" << p.first << ";" << p.second << "]"; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const vector<T>& v) { for (auto el : v) cout << el << " "; return os; }
template<typename T> inline T fetch() { T ret; cin >> ret; return ret; }
template<typename T> inline vector<T> fetch_vec(int sz) { vector<T> ret(sz); for (auto& elem : ret) cin >> elem; return ret; }

#ifdef _MSC_VER
#  include <intrin.h>
#  define __builtin_popcount __popcnt
#endif

struct Hashing {
    ull seed, mod;
    vector <ull> hs, pw;

    Hashing(ull seed = 31, ull mod = 1000173169) :
        seed(seed),
        mod(mod) {}

    void build(int n, const string& s) {
        hs.assign(n + 1, 0);
        pw.assign(n + 1, 1);
        pw[0] = 1;

        for (int i = 1; i <= n; ++i)
            pw[i] = pw[i - 1] * seed % mod;
        for (int i = 1; i <= n; ++i)
            hs[i] = (hs[i - 1] * seed + s[i]) % mod;
    }

    ull hash(int l, int r) {
        return (hs[r] - hs[l - 1] * pw[r - l + 1] % mod + mod) % mod;
    }
};

ll factmod(ll n, ll mod)
{
    if (n == 0) return 1;

    ll ans = 1;
    n = n % mod;

    while (n > 1)
    {
        ans = (ans * n) % mod;
        --n;
    }

    return ans;
}

void factmod2(ll n, ll mod, vector<ll>& out)
{
    out[0] = 1;

    n = n % mod;
    ll i = 1;

    while (i <= n)
    {
        out[i] = (out[i-1] * i) % mod;
        ++i;
    }
}

void facto(ll n, ll mod, vector<ll>& fact) {
    fact[0] = 1;
    fact[1] = 1;
    for (int i = 2; i <= n; ++i) {
        fact[i] = fact[i - 1] * i;
        fact[i] %= mod;
    }
}

ll binpow(ll a, ll b, ll mod) {
    ll res = 1;
    while (b) {
        if (b & 1) {
            res *= a;
            res %= mod;
        }
        b >>= 1;
        a = (a * a) % mod;
    }
    return res;
}

ll nCr(ll n, ll r, vector<ll>& fact, ll mod) {
    if (n < r)return 0;
    r = min(n - r, r);
    ll num = fact[n] % mod;
    ll den = (fact[r] * fact[n - r]) % mod;
    den = binpow(den, mod - 2, mod);
    return (num * den) % mod;
}

ll solve()
{
    int n, k;
    cin >> n >> k;

    vector<ll> v = fetch_vec<ll>(n);
    const ll mod = 1000000007ll;

    if (k == 1) return 0;

    std::sort(v.begin(), v.end());

    vector<ll> fact(n + 1);
    facto(n, mod, fact);
    /*
    for (int i = 0; i <= n - k; ++i)
    {
        for (int j = i + k - 1; j < n; ++j)
        {
            //ans = (ans + (v[j] - v[i]) * fact[j - i - 1] / fact[k - 2] / fact[j - i - 1 - k + 2] % mod) % mod;
            ans = (ans + (v[j] - v[i]) * nCr(j - i - 1, k - 2, fact, mod) % mod) % mod;
        }
    }
    */

    ll mini = 0;
    for (int i = 0; i < n; ++i)
    {
        mini = (mini + v[i] * nCr(n - i - 1ll, k - 1, fact, mod) % mod) % mod;
    }

    std::reverse(v.begin(), v.end());

    ll maxi = 0;
    for (int i = 0; i < n; ++i)
    {
        maxi = (maxi + v[i] * nCr(n - i - 1ll, k - 1, fact, mod) % mod) % mod;
    }

    ll ans = maxi - mini;

    while (ans < 0)
        ans += mod;

    return ans % mod;
}

int main()
{
    cout << solve() << endl;

    return 0;
}

Measured memory_bytes: 1792