#include<stdio.h>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
long long pre[100005]={1},a[100005],ans=0;
int n,k;
bool cmp(long long a,long long b)
{
	return a<b;
}
/*快速幂板子*/
long long qmul(long long a,long long b)
{
	long long res=1;
	while(b)
	{
		if(b&1)res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
/*组合数板子*/
long long C(long long a,long long b)
{
	if(a<=0||b<=0||a<b)return 0;
	long long k1=pre[a]%mod;
	long long k2=qmul(pre[b]%mod,mod-2)%mod;
	long long k3=qmul(pre[a-b]%mod,mod-2)%mod;
	return ((k1*k2)%mod*k3)%mod;
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)scanf("%lld",&a[i]);
	sort(a,a+n,cmp);
	pre[0]=1;
	for(int i=1;i<=n;i++)pre[i]=pre[i-1]*i%mod;
	for(int i=0;i<n;i++)
	{
		if(n-i-1>=k-1)ans+=(mod-C(n-i-1,k-1))*a[i]%mod;
		if(i>=k-1)ans+=C(i,k-1)%mod*a[i]%mod;
		ans%=mod;
	}
	while(ans<0)ans+=mod;
	printf("%lld\n",ans%mod);
}
//