N, K=list(map(int, input().split()))

def cmb(n, r, p):

  if (r < 0) or (n < r):

    return 0

  r = min(r, n - r)

  return fact[n] * factinv[r] * factinv[n-r] % p

p=10**9+7



fact = [1, 1]  # fact[n] = (n! mod p)

factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)

inv = [0, 1]  # factinv 計算用

 

for i in range(2, N + 1):

  fact.append((fact[-1] * i) % p)

  inv.append((-inv[p % i] * (p // i)) % p)

  factinv.append((factinv[-1] * inv[-1]) % p)





A=sorted(list(map(int, input().split())))



mn=0

mx=0

for i in range(N):

  mn+=(A[i]*cmb(N-i-1,K-1,p))%p

  mx+=(A[i]*cmb(i, K-1,p))%p

  mn%=p

  mx%=p

print(((mx-mn)%p))
N,K=list(map(int, input().split()))



A=list(map(int, input().split()))



p=10**9+7





def cmb(n, r, p):

    if (r < 0) or (n < r):

        return 0

    r = min(r, n - r)

    return fact[n] * factinv[r] * factinv[n-r] % p



p = 10 ** 9 + 7

n = 10 ** 5  # N は必要分だけ用意する

fact = [1, 1]  # fact[n] = (n! mod p) 階乗のmod

factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)

inv = [0, 1]  # factinv 計算用

 

for i in range(2, n + 1):

    fact.append((fact[-1] * i) % p)

    inv.append((-inv[p % i] * (p // i)) % p)

    factinv.append((factinv[-1] * inv[-1]) % p)









#最大値として、最小値として何回登場するか



A=sorted(A)

ans=0

for i in range(K-1,N):

    ans+=cmb(i,K-1, p)*A[i]

    ans%=p



for i in range(N-K+1):

    ans-=cmb(N-i-1, K-1, p)*A[i]

    ans%=p



print(ans)
N, K = list(map(int, input().split()))


def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n - r] % p


p = 10**9 + 7
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)
A = sorted(list(map(int, input().split())))
mn = 0
mx = 0
for i in range(N):
    mn += (A[i] * cmb(N - i - 1, K - 1, p)) % p
    mx += (A[i] * cmb(i, K - 1, p)) % p
    mn %= p
    mx %= p
print(((mx - mn) % p))

N, K = list(map(int, input().split()))
A = list(map(int, input().split()))
p = 10**9 + 7


def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n - r] % p


p = 10**9 + 7
n = 10**5  # N は必要分だけ用意する
fact = [1, 1]  # fact[n] = (n! mod p) 階乗のmod
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
for i in range(2, n + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)
# 最大値として、最小値として何回登場するか
A = sorted(A)
ans = 0
for i in range(K - 1, N):
    ans += cmb(i, K - 1, p) * A[i]
    ans %= p
for i in range(N - K + 1):
    ans -= cmb(N - i - 1, K - 1, p) * A[i]
    ans %= p
print(ans)

+A = list(map(int, input().split())) +p = 10**9 + 7 -fact = [1, 1]  # fact[n] = (n! mod p) +n = 10**5  # N は必要分だけ用意する +fact = [1, 1]  # fact[n] = (n! mod p) 階乗のmod -for i in range(2, N + 1): +for i in range(2, n + 1): -A = sorted(list(map(int, input().split()))) -mn = 0 -mx = 0 -for i in range(N): -    mn += (A[i] * cmb(N - i - 1, K - 1, p)) % p -    mx += (A[i] * cmb(i, K - 1, p)) % p -    mn %= p -    mx %= p -print(((mx - mn) % p)) +# 最大値として、最小値として何回登場するか +A = sorted(A) +ans = 0 +for i in range(K - 1, N): +    ans += cmb(i, K - 1, p) * A[i] +    ans %= p +for i in range(N - K + 1): +    ans -= cmb(N - i - 1, K - 1, p) * A[i] +    ans %= p +print(ans)