#include <bits/stdc++.h>
using namespace std;
int M = 1000000007;
int a[1000005];
int rnk[1000005];
bool comp(int i, int j) { return a[i] < a[j]; }
int main() {
  long long n, k;
  long long l;
  cin >> n >> l >> k;
  long long r = l % n;
  l = l / n;
  vector<pair<int, int> > aa;
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
    aa.push_back(make_pair(a[i], i));
  }
  sort(aa.begin(), aa.end());
  for (int i = n - 1; i >= 0; i--) {
    if (i < n - 1 && aa[i].first == aa[i + 1].first)
      rnk[aa[i].second] = rnk[aa[i + 1].second];
    else
      rnk[aa[i].second] = i;
  }
  vector<long long> dp(n, 1);
  long long ans = (l * n + r) % M;
  k = min(k, l + 1);
  for (int x = 2; x <= k; x++) {
    vector<long long> dp2(n, 0);
    vector<long long> sdp(n, 0);
    for (int i = 0; i < n; i++) {
      sdp[rnk[i]] += dp[i];
      sdp[rnk[i]] %= M;
    }
    for (int i = 1; i < n; i++) {
      sdp[i] += sdp[i - 1];
      sdp[i] %= M;
    }
    for (int i = 0; i < n; i++) {
      dp2[i] = sdp[rnk[i]];
      if (i < r)
        ans += dp2[i] * ((l - x + 2) % M);
      else
        ans += dp2[i] * ((l - x + 1) % M);
      ans %= M;
    }
    dp = dp2;
  }
  cout << ans;
  return 0;
}
