#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define VI vector<int>
#define PII pair<int,int>
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define gc getchar
inline LL inp() {
char c = gc();
while(c<'0' || c>'9') c = gc();
LL ret = 0;
while(c>='0' && c<='9') {
ret = (ret << 3) + (ret << 1) + c - 48;
c = gc();
}
return ret;
}
const int N = 1e6 + 10;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
int A[N]; pair<int,int> B[N];
int num[N];
int main() {
int n, k; LL l;
n=inp(); l = inp(); k=inp();
for(int i=0; i<n; i++) {
A[i] = inp();
B[i] = make_pair(A[i], i);
}
B[n] = make_pair(INF,n);
sort(B, B+n+1);
if(k==1) {
cout << l << endl;
return 0;
}
for(int i=0; i<n; i++)
num[i] = upper_bound(B,B+n+1,make_pair(B[i].F,n+1)) - B - 1;
int dp[n+1][k+1];
int cum[n+1][k+1];
for(int i=0; i<n; i++) {
dp[i][1] = 1;
cum[i][1] = (i==0) ? (dp[i][1]) : (cum[i-1][1] + dp[i][1]);
if(cum[i][1] >= MOD)
cum[i][1] -= MOD;
}
for(int i=2; i<=k; i++) {
for(int j=0; j<n; j++) {
dp[j][i] = cum[ num[j] ][i-1];
}
for(int j=0; j<n; j++) {
cum[j][i] = (j==0) ? dp[j][i] : cum[j-1][i] + dp[j][i];
if(cum[j][i] >= MOD)
cum[j][i] -= MOD;
}
}
LL ans = 0;
LL r = l%n; LL mx = l/n;
for(int i=0; i<n; i++) {
for(int j=1; j<=k ; j++) {
int val = 0;
if(B[i].second < r) {
if(mx-j+1 >= 0) {
val = (dp[i][j] * 1ll * ((mx-j+2)%MOD))%MOD;
}
}
else if(mx-j>=0) {
val = (dp[i][j] * 1ll * ((mx-j+1)%MOD))%MOD;
}
ans += val;
if(ans >= MOD)
ans -= MOD;
}
}
cout << ans << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIExMIGxvbmcgbG9uZwojZGVmaW5lIFZJIHZlY3RvcjxpbnQ+CiNkZWZpbmUgUElJIHBhaXI8aW50LGludD4KI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBnYyBnZXRjaGFyCgppbmxpbmUgTEwgaW5wKCkgewogICAgY2hhciBjID0gZ2MoKTsKICAgIHdoaWxlKGM8JzAnIHx8IGM+JzknKSBjID0gZ2MoKTsKICAgIExMIHJldCA9IDA7CiAgICB3aGlsZShjPj0nMCcgJiYgYzw9JzknKSB7CiAgICAgICAgcmV0ID0gKHJldCA8PCAzKSArIChyZXQgPDwgMSkgKyBjIC0gNDg7CiAgICAgICAgYyA9IGdjKCk7CiAgICB9CiAgICByZXR1cm4gcmV0Owp9Cgpjb25zdCBpbnQgTiA9IDFlNiArIDEwOwpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IElORiA9IDFlOSArIDc7CgppbnQgQVtOXTsgcGFpcjxpbnQsaW50PiBCW05dOwppbnQgbnVtW05dOwoKaW50IG1haW4oKSB7CglpbnQgbiwgazsgTEwgbDsKCW49aW5wKCk7IGwgPSBpbnAoKTsgaz1pbnAoKTsKCWZvcihpbnQgaT0wOyBpPG47IGkrKykgewoJCUFbaV0gPSBpbnAoKTsKCQlCW2ldID0gbWFrZV9wYWlyKEFbaV0sIGkpOwoJfQoKCUJbbl0gPSBtYWtlX3BhaXIoSU5GLG4pOwoJc29ydChCLCBCK24rMSk7CgoJaWYoaz09MSkgewoJCWNvdXQgPDwgbCA8PCBlbmRsOwoJCXJldHVybiAwOwoJfQoKCWZvcihpbnQgaT0wOyBpPG47IGkrKykKCQludW1baV0gPSB1cHBlcl9ib3VuZChCLEIrbisxLG1ha2VfcGFpcihCW2ldLkYsbisxKSkgLSBCIC0gMTsKCglpbnQgZHBbbisxXVtrKzFdOwoJaW50IGN1bVtuKzFdW2srMV07CgoJZm9yKGludCBpPTA7IGk8bjsgaSsrKSB7CgkJZHBbaV1bMV0gPSAxOwoJCWN1bVtpXVsxXSA9IChpPT0wKSA/IChkcFtpXVsxXSkgOiAoY3VtW2ktMV1bMV0gKyBkcFtpXVsxXSk7CgkJaWYoY3VtW2ldWzFdID49IE1PRCkKCQkJCWN1bVtpXVsxXSAtPSBNT0Q7Cgl9CgoJZm9yKGludCBpPTI7IGk8PWs7IGkrKykgewoJCWZvcihpbnQgaj0wOyBqPG47IGorKykgewoJCQlkcFtqXVtpXSA9IGN1bVsgbnVtW2pdIF1baS0xXTsKCQl9CgkJZm9yKGludCBqPTA7IGo8bjsgaisrKSB7CgkJCWN1bVtqXVtpXSA9IChqPT0wKSA/IGRwW2pdW2ldIDogY3VtW2otMV1baV0gKyBkcFtqXVtpXTsKCQkJaWYoY3VtW2pdW2ldID49IE1PRCkKCQkJCWN1bVtqXVtpXSAtPSBNT0Q7CgkJfQoJfQoKCUxMIGFucyA9IDA7CglMTCByID0gbCVuOyBMTCBteCA9IGwvbjsKCWZvcihpbnQgaT0wOyBpPG47IGkrKykgewoJCWZvcihpbnQgaj0xOyBqPD1rIDsgaisrKSB7CgoJCQlpbnQgdmFsID0gMDsgCgkJCWlmKEJbaV0uc2Vjb25kIDwgcikgewoJCQkJaWYobXgtaisxID49IDApIHsKCQkJCQl2YWwgPSAoZHBbaV1bal0gKiAxbGwgKiAoKG14LWorMiklTU9EKSklTU9EOwoJCQkJfSAKCQkJfQoJCQllbHNlIGlmKG14LWo+PTApIHsKCQkJCXZhbCA9IChkcFtpXVtqXSAqIDFsbCAqICgobXgtaisxKSVNT0QpKSVNT0Q7CgkJCX0KCQkJYW5zICs9IHZhbDsKCQkJaWYoYW5zID49IE1PRCkKCQkJCWFucyAtPSBNT0Q7CgkJfQoJfQoKCWNvdXQgPDwgYW5zIDw8IGVuZGw7Cgp9CQ==