#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000 * 1000 * 1000 + 7;
int main() {
  ios_base::sync_with_stdio(0);
  long long n, l, k;
  long long ans = 0;
  cin >> n >> l >> k;
  vector<long long> A(n);
  for (int i = 0; i < (n); ++i) cin >> A[i];
  vector<vector<long long> > Cnt(k + 1);
  int d;
  unordered_map<long long, int> M;
  {
    int last = -1;
    vector<long long> B(A);
    sort(B.begin(), B.end());
    int cnt = 0;
    for (int i = 0; i < (n); ++i) {
      if (!i || B[i] != B[i - 1]) {
        if (last >= 0) Cnt[1][last] = cnt;
        cnt = 1;
        Cnt[1].push_back(0);
        last++;
        M[B[i]] = last;
      }
      if (i && B[i] == B[i - 1]) cnt++;
    }
    Cnt[1][last] = cnt;
    d = last + 1;
  }
  Cnt[0] = vector<long long>(d, 0);
  Cnt[0][0] = 1;
  for (int(i) = (2); i <= (k); ++(i)) Cnt[i] = vector<long long>(d, 0);
  for (int(i) = (1); i <= (min(k, l / n)); ++(i)) {
    long long pref = 0;
    long long sum = 0;
    for (int(j) = (0); j <= (d - 1); ++(j)) {
      pref = (pref + Cnt[i - 1][j]) % MOD;
      Cnt[i][j] = (pref * Cnt[1][j]) % MOD;
      sum = (sum + Cnt[i][j]) % MOD;
    }
    ans = (ans + (sum % MOD) * ((l / n - i + 1) % MOD)) % MOD;
  }
  vector<long long> CntSuf(d, 0);
  for (int i = 0; i < (l % n); ++i) CntSuf[M[A[i]]]++;
  for (int(i) = (1); i <= (min(k, (l + n - 1) / n)); ++(i)) {
    long long pref = 0;
    for (int(j) = (0); j <= (d - 1); ++(j)) {
      pref = (pref + Cnt[i - 1][j]) % MOD;
      ans = (ans + pref * CntSuf[j]) % MOD;
    }
  }
  cout << ans << endl;
  return 0;
}
