#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) > (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define x first
#define y second
#define pb push_back
#define PB pop_back()
#define iOS ios_base::sync_with_stdio(false)
#define sqr(a) (((a) * (a)))
#define all(a) a.begin() , a.end()
#define error(x) cerr << #x << " = " << (x) <<endl
#define Error(a,b) cerr<<"( "<<#a<<" , "<<#b<<" ) = ( "<<(a)<<" , "<<(b)<<" )\n";
#define errop(a) cerr<<#a<<" = ( "<<((a).x)<<" , "<<((a).y)<<" )\n";
#define coud(a,b) cout<<fixed << setprecision((b)) << (a)
#define L(x) ((x)<<1)
#define R(x) (((x)<<1)+1)
#define umap unordered_map
#define double long double
typedef long long ll;
typedef pair<int,int>pii;
typedef vector<int> vi;
typedef complex<double> point;
template <typename T> using os = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <class T> inline void smax(T &x,T y){ x = max((x), (y));}
template <class T> inline void smin(T &x,T y){ x = min((x), (y));}
const int maxn = 1e6 + 100, mod = 1e9 + 7;
int a[maxn], dp[maxn][2], p[maxn];
ll l, c;
int n, k;
ll ans;
int last;
inline void calc(int i, int j){
ll t = (c - j + 1LL) % mod;
if(i > last && l % (ll)n)
t = (t - 1LL + mod) % mod;
ll x = (1LL * t * (ll)dp[i][j & 1]) % mod;
ans = (ans + x) % mod;
}
int main(){
scanf("%d %lld %d", &n, &l, &k);
c = l / (ll)n;
last = ((ll)(l - 1LL) % (ll)n);
if(l % n)
++ c;
k = (int)min((ll)k, c);
For(i,0,n){
scanf("%d", a + i);
p[i] = i;
dp[i][1] = 1;
calc(i, 1);
}
sort(p, p + n, [](const int &i, const int &j){return pii(a[i], i) < pii(a[j], j);});
int po = 0;
For(j,2,k + 1){
po = 0;
int x = j & 1, y = !x;
int sum = 0;
For(iii,0,n){
int i = p[iii];
while(po < n && a[p[po]] <= a[i])
sum = (sum + dp[p[po ++]][y]) % mod;
dp[i][x] = sum;
calc(i, j);
}
}
ans %= mod;
ans = (ans + mod) % mod;
printf("%d\n", (int)ans);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIEZvcmVhY2goaSwgYykgZm9yKF9fdHlwZW9mKChjKS5iZWdpbigpKSBpID0gKGMpLmJlZ2luKCk7IGkgIT0gKGMpLmVuZCgpOyArK2kpCiNkZWZpbmUgRm9yKGksYSxiKSBmb3IoaW50IChpKT0oYSk7KGkpIDwgKGIpOyArKyhpKSkKI2RlZmluZSByb2YoaSxhLGIpIGZvcihpbnQgKGkpPShhKTsoaSkgPiAoYik7IC0tKGkpKQojZGVmaW5lIHJlcChpLCBjKSBmb3IoYXV0byAmKGkpIDogKGMpKQojZGVmaW5lIHggZmlyc3QKI2RlZmluZSB5IHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIFBCIHBvcF9iYWNrKCkKI2RlZmluZSBpT1MgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSkKI2RlZmluZSBzcXIoYSkgKCgoYSkgKiAoYSkpKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCkgLCBhLmVuZCgpCiNkZWZpbmUgZXJyb3IoeCkgY2VyciA8PCAjeCA8PCAiID0gIiA8PCAoeCkgPDxlbmRsCiNkZWZpbmUgRXJyb3IoYSxiKSBjZXJyPDwiKCAiPDwjYTw8IiAsICI8PCNiPDwiICkgPSAoICI8PChhKTw8IiAsICI8PChiKTw8IiApXG4iOwojZGVmaW5lIGVycm9wKGEpIGNlcnI8PCNhPDwiID0gKCAiPDwoKGEpLngpPDwiICwgIjw8KChhKS55KTw8IiApXG4iOwojZGVmaW5lIGNvdWQoYSxiKSBjb3V0PDxmaXhlZCA8PCBzZXRwcmVjaXNpb24oKGIpKSA8PCAoYSkKI2RlZmluZSBMKHgpICgoeCk8PDEpCiNkZWZpbmUgUih4KSAoKCh4KTw8MSkrMSkKI2RlZmluZSB1bWFwIHVub3JkZXJlZF9tYXAKI2RlZmluZSBkb3VibGUgbG9uZyBkb3VibGUKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsaW50PnBpaTsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiBjb21wbGV4PGRvdWJsZT4gcG9pbnQ7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyBvcyA9ICB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CnRlbXBsYXRlIDxjbGFzcyBUPiAgaW5saW5lIHZvaWQgc21heChUICZ4LFQgeSl7IHggPSBtYXgoKHgpLCAoeSkpO30KdGVtcGxhdGUgPGNsYXNzIFQ+ICBpbmxpbmUgdm9pZCBzbWluKFQgJngsVCB5KXsgeCA9IG1pbigoeCksICh5KSk7fQpjb25zdCBpbnQgbWF4biA9IDFlNiArIDEwMCwgbW9kID0gMWU5ICsgNzsKaW50IGFbbWF4bl0sIGRwW21heG5dWzJdLCBwW21heG5dOwpsbCBsLCBjOwppbnQgbiwgazsKbGwgYW5zOwppbnQgbGFzdDsKaW5saW5lIHZvaWQgY2FsYyhpbnQgaSwgaW50IGopewoJbGwgdCA9IChjIC0gaiArIDFMTCkgJSBtb2Q7CglpZihpID4gbGFzdCAmJiBsICUgKGxsKW4pCgkJdCA9ICh0IC0gMUxMICsgbW9kKSAlIG1vZDsKCWxsIHggPSAoMUxMICogdCAqIChsbClkcFtpXVtqICYgMV0pICUgbW9kOwoJYW5zID0gKGFucyArIHgpICUgbW9kOwp9CmludCBtYWluKCl7CglzY2FuZigiJWQgJWxsZCAlZCIsICZuLCAmbCwgJmspOwoJYyA9IGwgLyAobGwpbjsKCWxhc3QgPSAoKGxsKShsIC0gMUxMKSAlIChsbCluKTsKCWlmKGwgJSBuKQoJCSsrIGM7CglrID0gKGludCltaW4oKGxsKWssIGMpOwoJRm9yKGksMCxuKXsKCQlzY2FuZigiJWQiLCBhICsgaSk7CgkJcFtpXSA9IGk7CgkJZHBbaV1bMV0gPSAxOwoJCWNhbGMoaSwgMSk7Cgl9Cglzb3J0KHAsIHAgKyBuLCBbXShjb25zdCBpbnQgJmksIGNvbnN0IGludCAmail7cmV0dXJuIHBpaShhW2ldLCBpKSA8IHBpaShhW2pdLCBqKTt9KTsKCWludCBwbyA9IDA7CglGb3IoaiwyLGsgKyAxKXsKCQlwbyA9IDA7CgkJaW50IHggPSBqICYgMSwgeSA9ICF4OwoJCWludCBzdW0gPSAwOwoJCUZvcihpaWksMCxuKXsKCQkJaW50IGkgPSBwW2lpaV07CgkJCXdoaWxlKHBvIDwgbiAmJiBhW3BbcG9dXSA8PSBhW2ldKQoJCQkJc3VtID0gKHN1bSArIGRwW3BbcG8gKytdXVt5XSkgJSBtb2Q7CgkJCWRwW2ldW3hdID0gc3VtOwoJCQljYWxjKGksIGopOwoJCX0KCX0KCWFucyAlPSBtb2Q7CglhbnMgPSAoYW5zICsgbW9kKSAlIG1vZDsKCXByaW50ZigiJWRcbiIsIChpbnQpYW5zKTsKCXJldHVybiAwOwp9