#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000100;
const int MOD=10000007;
long long n,k;
long long fib[maxn];
int main()
{
while(scanf("%lld%lld",&n,&k)!=EOF){
long long a,b,sum=0;
for(int i=0;i<n;i++){
scanf("%lld",&fib[i]);
sum+=fib[i];
}
sort(fib,fib+n);
a=fib[n-1],b=fib[n-2];
long long res[3][3]={{1,0,0},{0,1,0},{0,0,1}};
long long A[3][3]={{1,1,1},{0,1,1},{0,1,0}};
while(k){
long long s[3][3];
if(k&1){
memset(s,0,sizeof(s));
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
s[i][j]+=res[i][k]*A[k][j];
s[i][j]%=MOD;
}
}
}
memcpy(res,s,sizeof(s));
}
memset(s,0,sizeof(s));
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
s[i][j]+=A[i][k]*A[k][j];
s[i][j]%=MOD;
}
}
}
memcpy(A,s,sizeof(s));
k>>=1;
}
long long ans=res[0][0]*(a+b)+res[0][1]*a+res[0][2]*b;
ans+=sum-a-b;
cout<<ans%MOD<<endl;
}
return 0;
}