Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

P18QPROC - QUALIFY ROUND 2018 C - SỐ LỚN NHẤT VÀ NHỎ NHẤT

Cho N số nguyên dương A[]. Mỗi lần, bạn chọn một tổ hợp gồm K số, như vậy, có tất cả C(K, N) cách chọn. Bài toán đặt ra là hãy tính tổng của sự chênh lệch giữa số lớn nhất và nhỏ nhất trong tổ hợp được chọn của tất cả C(K, N) lần.

Input

Dòng đầu tiên là số nguyên N và K (1 ≤ N ≤ 105, 1 ≤ K ≤ N).  Dòng tiếp theo gồm N số nguyên A[i] (0 ≤ A[i] ≤ 109).

Output

In ra đáp án tìm được theo modulo 109+7.

Example

Input:
4 2
10 20 30 40 Output: 100

Giải thích test: Có tất cả 6 khả năng: (10, 20), (20, 30), (30, 40), (10, 30), (20, 40), (10, 40).
Tổng cộng bằng 10+10+10+20+20+30 = 100.


Được gửi lên bởi:adm
Ngày:2018-05-14
Thời gian chạy:1s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:ASM32-GCC ASM32 ASM64 MAWK BC C CSHARP C++ 4.3.2 CPP CPP14 COFFEE LISP sbcl DART FORTH GO JAVA JS-RHINO JS-MONKEY KTLN OCT PAS-GPC PAS-FPC PERL6 PERL PROLOG PYTHON PYTHON3 PY_NBC R RACKET SQLITE SWIFT UNLAMBDA

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.