#include <bits/stdc++.h>
using namespace std;
const int maxn = static_cast<int>(1e6 + 10);
const int mod = static_cast<int>(1e9 + 7);
long long a[maxn], cnt[maxn], cnt2[maxn];
int main() {
  long long n, l, k;
  scanf("%lld%lld%lld", &n, &l, &k);
  vector<pair<long long, long long> > asort;
  vector<int> v;
  long long diff = l % n;
  for (int i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    v.push_back(a[i]);
    asort.push_back(make_pair(a[i], i));
  }
  sort(v.begin(), v.end());
  sort(asort.begin(), asort.end());
  for (int i = 0; i < static_cast<int>((asort).size()); i++) {
    asort[i].first = i;
    swap(asort[i].first, asort[i].second);
  }
  sort(asort.begin(), asort.end());
  long long D = min(l / n + 1, k);
  vector<vector<long long> > dp(n + 2, vector<long long>(D + 2, 0));
  for (int i = 0; i < n; i++) {
    dp[i][1] = 1;
  }
  for (int j = 2; j <= D; j++) {
    long long pref = 0;
    int pos = 0;
    for (int i = 0; i < n; i++) {
      while (pos < n && v[pos] <= v[i]) {
        pref = (pref + dp[pos][j - 1]) % mod;
        pos++;
      }
      dp[i][j] = pref;
    }
  }
  long long answer = 0;
  long long e = l / n;
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= D; j++) {
      answer += (dp[i][j] * ((e - j + 1) % mod)) % mod;
      while (answer >= mod) answer -= mod;
    }
  }
  long long T = min(k, e + 1);
  for (int i = 0; i < diff; i++) {
    for (int j = 1; j <= T; j++) {
      answer += dp[asort[i].second][j];
      while (answer >= mod) answer -= mod;
    }
  }
  printf("%lld\n", answer);
  return 0;
}
