#include <bits/stdc++.h>
using namespace std;
int main() {
  int i, j, k, n;
  long long l;
  cin >> n >> l >> k;
  int dp[2][n];
  vector<pair<int, int> > a(n);
  for (i = 0; i < n; i++) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a.begin(), a.end());
  long long ans = 0;
  long long lev = l / n;
  int r = l % n - 1;
  for (i = 0; i < n; i++) {
    dp[0][i] = 1;
    ans = (ans + lev) % 1000000007;
    if (a[i].second <= r) ans++;
  }
  int p = 0;
  long long maxlen = lev;
  if (r > -1) maxlen++;
  for (j = 2; j <= min((long long)k, maxlen); j++) {
    p = 1 - p;
    int loc = 0;
    long long sum = 0;
    for (i = 0; i < n; i++) {
      while (loc < n && a[loc].first <= a[i].first)
        sum = (sum + dp[!p][loc++]) % 1000000007;
      dp[p][i] = sum;
      ans = (ans + sum * ((lev - j + 1) % 1000000007)) % 1000000007;
      if (a[i].second <= r) ans = (ans + sum) % 1000000007;
    }
  }
  cout << ans % 1000000007 << endl;
  return 0;
}
