#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;

}	