#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, s, n) for (int i = s; i < (int)(n); i++)
#define Clear(a) a = decltype(a)()
#define all(a) a.begin(),a.end()
#define vec vector
typedef long long ll;
typedef pair<int,int> p;
//const ll big=998244353;
const ll big=1000000007;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
ll max(ll x,ll y){
if(x>y)return x;
else return y;
}
ll min(ll x,ll y){
if(x<y)return x;
else return y;
}
ll expm(ll x,ll y){
    if(y==0)return 1;//0^0=1
    if(x==1||x==0)return x;
    if(y%2==1)return (expm(x,y-1)*x)%big;
    ll t=expm(x,y/2);
    return (t*t)%big;
}
ll exp(ll x,ll y){
    if(y==0)return 1;//0^0=1
    if(x==1||y==0)return x;
    if(y%2==1)return exp(x,y-1)*x;
    ll t=exp(x,y/2);
    return t*t;
}
ll inv(ll x){
    return expm(x,big-2);
}

struct mint{
    ll x;
    constexpr mint(ll x=0) : x ((x%big+big)%big){}
    constexpr mint operator-() const {
        return mint(-x);
    }
    constexpr mint& operator+=(const mint &a){
        if((x+=a.x)>=big)x-=big;
        return *this;
    }
    constexpr mint& operator-=(const mint &a){
        if((x+=big-a.x)>=big)x-=big;
        return *this;
    }
    constexpr mint& operator*=(const mint &a){
        (x*=a.x)%=big;
        return *this;
    }
    constexpr mint& operator/=(mint &a){
        return (*this)*=a.inv();
    }

    constexpr mint operator+(const mint &a)const{
        mint res(*this);
        return res+=a;
    }
    constexpr mint operator-(const mint &a)const{
        mint res(*this);
        return res-=a;
    }
    constexpr mint operator*(const mint &a)const{
        mint res(*this);
        return res*=a;
    }
    constexpr mint operator/(mint &a)const{
        mint res(*this);
        return res/=a;
    }
    constexpr bool operator==(const mint &a)const{
        if((*this).x==a.x)return true;
        else return false;
    }
    constexpr bool operator!=(const mint &a)const{
        return !((*this)==a);
    }
    constexpr bool operator<(const mint &a)const{
        if((*this).x<a.x)return true;
        else return false;
    }constexpr bool operator>(const mint &a)const{
        if((*this).x>a.x)return true;
        else return false;
    }constexpr bool operator<=(const mint &a){
        return !((*this)>a);
    }constexpr bool operator>=(const mint &a){
        return !((*this)<a);
    }

    constexpr mint pow(ll t){
        if(t==0)return (mint)1;
        if(t%2==0){
            mint k=pow(t/2);
            return k*k;
        }else{
            if(t>0)return (*this)*pow(t-1);
            else return pow(t+1)/(*this);
        }
    }
    constexpr mint inv(){
        return pow(big-2);
    }

    friend ostream& operator<<(ostream &os,const mint &m){
        os << m.x;
        return os;
    }
    friend istream& operator>>(istream &is,mint &m){
        is >> m.x;
        m.x=(m.x%big+big)%big;
        return is;
    }
};

mint com(int x,int y){
    if(y>x||y<0)return 0;
    mint ans=1;
    rep(i,y){
        mint t=x-i,s=y-i;
        ans*=t/s;
    }
    return ans;
}


int main(){
    ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    cout << fixed << setprecision(10);
    /*--------------------------------*/

    int n,k;cin >> n >> k;
    vec<int> b(n);
    rep(i,n)cin >> b[i];
    /*
    一番でっかいのが選ばれる<=>一番でっかいのが入ってる C(n-1,k-1)
    次:一番でっかいのが入っておらず、かつそいつはいる C(n-2,k-1)
    次:上二つはおらず、3ばんめはいる C(n-3,k-1)
    ...
    i番目(iは0_index): C(n-i-1,k-1)
    */
    mint ans=0;
    vec<mint> fac(n+1),facin(n+1);
    fac[0]=1;facin[0]=1;
    rep(i,n){
        mint s=i+1;
        fac[i+1]=s*fac[i];
        facin[i+1]=facin[i]/s;
    }
    auto C=[&](int x,int y){
        if(y<0||y>x)return (mint)0;
        return fac[x]*facin[y]*facin[x-y];
    };

    sort(all(b));
    vec<mint> a(n);
    rep(i,n)a[i]=b[i];
    rep(i,n){
        ans-=a[i]*C(n-i-1,k-1);
    }
    reverse(all(a));
    rep(i,n){
        ans+=a[i]*C(n-i-1,k-1);
    }
    cout << ans << endl;
}

Measured memory_bytes: 6084