#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int MOD = 1000000007;
const int MAX = 1000005;
vector<int> dp[MAX];
int a[MAX];
void add(int &a, int b)
{
a += b;
if (a >= MOD)
a -= MOD;
}
int main()
{
int n, k;
long long l;
scanf("%d %lld %d", &n, &l, &k);
for (int i = 0; i < n; i++)
dp[i].resize(k + 1);
vector<int> vals;
for (int i = 0; i < n; i++)
{
scanf("%d", a + i);
vals.push_back(a[i]);
}
sort(vals.begin(), vals.end());
vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
for (int i = 0; i < n; i++)
{
a[i] = lower_bound(vals.begin(), vals.end(), a[i]) - vals.begin();
dp[i][1] = 1;
}
vector<int> cnt;
cnt.resize(vals.size());
for (int j = 2; j <= k; j++)
{
for (int i = 0; i < (int)cnt.size(); i++)
cnt[i] = 0;
for (int i = 0; i < n; i++)
add(cnt[a[i]], dp[i][j - 1]);
for (int i = 1; i < (int)cnt.size(); i++)
add(cnt[i], cnt[i - 1]);
for (int i = 0; i < n; i++)
dp[i][j] = cnt[a[i]];
}
int ans = 0;
for (int i = 0; i < n; i++)
for (int j = 1; j <= k; j++)
{
long long b = l / n;
if (i < l % n)
b++;
b = b - j + 1;
if (b > 0)
ans = (ans + (b % MOD) * dp[i][j]) % MOD;
}
printf("%d\n", ans);
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CmNvbnN0IGludCBNQVggPSAxMDAwMDA1Owp2ZWN0b3I8aW50PiBkcFtNQVhdOwppbnQgYVtNQVhdOwp2b2lkIGFkZChpbnQgJmEsIGludCBiKQp7CglhICs9IGI7CglpZiAoYSA+PSBNT0QpCgkJYSAtPSBNT0Q7Cn0KaW50IG1haW4oKQp7CglpbnQgbiwgazsKCWxvbmcgbG9uZyBsOwoJc2NhbmYoIiVkICVsbGQgJWQiLCAmbiwgJmwsICZrKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCWRwW2ldLnJlc2l6ZShrICsgMSk7Cgl2ZWN0b3I8aW50PiB2YWxzOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJc2NhbmYoIiVkIiwgYSArIGkpOwoJCXZhbHMucHVzaF9iYWNrKGFbaV0pOwoJfQoJc29ydCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpOwoJdmFscy5yZXNpemUodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSkgLSB2YWxzLmJlZ2luKCkpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJYVtpXSA9IGxvd2VyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgYVtpXSkgLSB2YWxzLmJlZ2luKCk7CgkJZHBbaV1bMV0gPSAxOwoJfQoJdmVjdG9yPGludD4gY250OwoJY250LnJlc2l6ZSh2YWxzLnNpemUoKSk7Cglmb3IgKGludCBqID0gMjsgaiA8PSBrOyBqKyspCgl7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWNudC5zaXplKCk7IGkrKykKCQkJY250W2ldID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQkJYWRkKGNudFthW2ldXSwgZHBbaV1baiAtIDFdKTsKCQlmb3IgKGludCBpID0gMTsgaSA8IChpbnQpY250LnNpemUoKTsgaSsrKQoJCQlhZGQoY250W2ldLCBjbnRbaSAtIDFdKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQkJZHBbaV1bal0gPSBjbnRbYVtpXV07Cgl9CglpbnQgYW5zID0gMDsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCWZvciAoaW50IGogPSAxOyBqIDw9IGs7IGorKykKCQl7CgkJCWxvbmcgbG9uZyBiID0gbCAvIG47CgkJCWlmIChpIDwgbCAlIG4pCgkJCQliKys7CgkJCWIgPSBiIC0gaiArIDE7CgkJCWlmIChiID4gMCkKCQkJCWFucyA9IChhbnMgKyAoYiAlIE1PRCkgKiBkcFtpXVtqXSkgJSBNT0Q7CgkJfQoJcHJpbnRmKCIlZFxuIiwgYW5zKTsKCXJldHVybiAwOwp9Cg==