#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
/*
    s.find_by_order(k) ---> returns iterator to the element at index(from 0) k
    s.order_of_key(val) ---> number of elements that are strictly smaller than the given value
*/
typedef long long int ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<long long int> vl;
typedef vector<vector<int>> vvi;
typedef vector<vector<long long int>> vvl;
typedef pair<int, int> pii;
typedef pair<long long int, long long int> pll;
typedef vector<pair<int, int>> vii;
typedef vector<pair<long long int, long long int>> vll;
#define fast() ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define test() long long int tc; cin >> tc; cin.ignore(); while(tc--) 
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define mp make_pair
#define MOD 1000000007
#define SMOD 998244353
#define pq priority_queue
#define all(x) x.begin(),x.end()
#define SP(x) setprecision(x)
#define sp " "
#define inp(a) ll a;cin>>a;cin.ignore()
#define inps(a,b) ll a,b;cin>>a>>b;cin.ignore()
#define out(a) cout<<SP(20)<<a<<'\n'
#define outs(a,b) cout<<SP(20)<<a<<" "<<b<<'\n'
#define ins insert
#define er erase
#define lb lower_bound
#define ub upper_bound
#define printclock cerr<<"Time : "<<1000*(ld)clock()/(ld)CLOCKS_PER_SEC<<"ms\n";
#define inpa(a,n) ll a[n]; for(int i=0; i<n; i++){cin>>a[i];}
#define inpv(a,n) vl a; for(int i=0; i<n; i++){inp(x);a.pb(x);}
#define outa(a,n) for(int i=0;i<n;i++){cout<<a[i]<<" ";}cout<<'\n';
#define outv(v) for(auto i:v){cout<<i<<" ";}cout<<'\n';
set<char> vow = {'a','e','i','o','u','A','E','I','O','U'};
ll xpow(ll n, ll m){if(m==0){return 1;}else{ll x = xpow(n, m/2);if(m&1){return x*x*n;}else{return x*x;}}}
ll xmod(ll a, ll m){return (((a%m)+m)%m);}
ll xmodpow(ll n, ll m, ll y){if(m==0){return 1;}else{ll x = xmodpow(n, m/2, y);if(m&1){return xmod((xmod((xmod(x,y)*xmod(x,y)),y)*xmod(n,y)),y);}else{return xmod((xmod(x,y)*xmod(x,y)),y);}}}

ll fact[100005];
ll ifact[100005];
ll NCR(ll i, ll j){
    if(j>i){
        return 0ll;
    }
    ll z = fact[i];
    z*=ifact[i-j];
    z%=MOD;
    z*=ifact[j];
    z%=MOD;
    return z;
}

int main(){
    fast();
    
    fact[0] = 1;
    for(ll i=1; i<=100000; i++){
        fact[i] = xmod(fact[i-1]*i, MOD);
    }
    ifact[100000] = xmodpow(fact[100000], MOD-2, MOD);
    for(ll i=99999; i>=0; i--){
        ifact[i] = xmod(ifact[i+1]*(i+1), MOD);
    }
    ll n, k;
    cin >> n >> k;
    inpv(a, n);
    sort(all(a));
    // map <ll, ll> m;
    // for(int i=0; i<n; i++){
    //     ll x;
    //     cin >> x;
    //     m[x]++;
    // }
    ll ans = 0;
    ll tot = n;
    ll left = 0;
    for(ll i=0; i<n; i++){
        left = i;
        ll right = n-1-i;
        ll val = a[i];
        ll freq = NCR(left, k-1);
        // cout << freq << endl;
        val*=freq;
        val = xmod(val, MOD);
        ans+=val;
        ans%=MOD;
        freq = NCR(right, k-1);
        // cout << freq << endl;
        val = a[i];
        val*=freq;
        val*=-1;
        val = xmod(val, MOD);
        ans+=val;
        ans%=MOD;
    }
    // for(auto i:m){
    //     ll curr = i.ss;
    //     ll z = curr;
    //     left+=curr;
    //     ll have = left-1;
    //     ll zz = 0;
    //     cout << have << endl;
    //     if(have>=(k-1)){
    //         zz = fact[have];
    //         zz*=ifact[k-1];
    //         zz%=MOD;
    //         zz*=ifact[have-k+1];
    //         zz%=MOD;
    //     }
    //     z*=zz;
    //     z%=MOD;
    //     ll change = i.ff*z;
    //     change%=MOD;
    //     ans+=change;
    //     ans%=MOD;
    //     ll right = tot-left;
    //     z = curr;
    //     have = right+curr-1;
    //     zz = 0;
    //     cout << have << endl;
    //     if(have>=(k-1)){
    //         zz = fact[have];
    //         zz*=ifact[k-1];
    //         zz%=MOD;
    //         zz*=ifact[have-k+1];
    //         zz%=MOD;
    //     }
    //     z*=zz;
    //     z%=MOD;
    //     change = i.ff*z;
    //     change%=MOD;
    //     ans = xmod(ans-change, MOD);
    // }
    out(ans);
}

Measured memory_bytes: 2936