using
System;
class
GFG{
static
int
N = 100005;
static
int
mod = 1000000007;
static
int
temp = 391657242;
static
int
[]factorial =
new
int
[N];
static
int
[]modinverse =
new
int
[N];
static
int
power(
int
a,
int
m1)
{
if
(m1 == 0)
return
1;
else
if
(m1 == 1)
return
a;
else
if
(m1 == 2)
return
(a * a) % mod;
else
if
((m1 & 1)!=0)
return
(a * power(power(a, m1 / 2), 2)) % mod;
else
return
power(power(a, m1 / 2), 2) % mod;
}
static
void
factorialfun()
{
factorial[0] = 1;
for
(
int
i = 1; i < N; i++)
factorial[i] = (factorial[i - 1] * i)% mod;
}
static
void
modinversefun()
{
modinverse[N - 1] = power(factorial[N - 1], mod - 2) % mod;
for
(
int
i = N - 2; i >= 0; i--)
modinverse[i] = (modinverse[i + 1]*(i + 1)) % mod;
}
static
int
binomial(
int
n,
int
r)
{
if
(r > n)
return
0;
int
a = (factorial[n] * modinverse[n - r]) % mod;
a = (a * modinverse[r]) % mod;
return
a;
}
static
int
max_min(
int
[]a,
int
n,
int
k)
{
Array.Sort(a);
factorialfun();
modinversefun();
int
ans = 0;
k--;
for
(
int
i = 0; i < n; i++) {
int
x = n - i - 1;
if
(x >= k)
ans -= binomial(x, k) * a[i] % mod;
int
y = i;
if
(y >= k)
ans += binomial(y, k) * a[i] % mod;
ans = (ans + mod) % mod;
}
return
ans % temp;
}
public
static
void
Main(
string
[]args)
{
int
[]a = { 1, 1, 3, 4 };
int
k = 2;
int
n = a.Length;
Console.WriteLine(max_min(a, n, k));
}
}