#include <bits/stdc++.h>
using namespace std;
int ar[10000009], pr[10000009];
int ap[10000009];
int seen[10000009], cnt[10000009];
map<int, int> mymap;
vector<int> vec;
int main() {
  int i, j, k, l;
  long long N, M, L, K;
  long long MOD = 1000000007, Q, index, ans, now, temp;
  cin >> N >> L >> K;
  M = L / N;
  Q = L % N;
  if (L % N) {
    K = min(K, L / N + 1);
  } else
    K = min(K, L / N);
  for (i = 1; i <= N; i++) {
    int temppp;
    scanf("%d", &temppp);
    ar[i] = temppp;
    vec.push_back(ar[i]);
  }
  if (N >= L) {
    cout << L << endl;
    return 0;
  }
  sort(vec.begin(), vec.end());
  index = 0;
  index++;
  mymap[vec[0]] = index;
  for (i = 1; i < N; i++) {
    if (vec[i] != vec[i - 1]) {
      index++;
      mymap[vec[i]] = index;
    }
  }
  for (i = 1; i <= N; i++) {
    ar[i] = mymap[ar[i]];
    pr[i] = ar[i];
    cnt[ar[i]]++;
  }
  sort(pr + 1, pr + 1 + N);
  for (j = 1; j <= N; j++) ap[pr[j]] = 1;
  ans = 0;
  for (i = 1; i <= K; i++) {
    temp = 0;
    for (j = 1; j <= N; j++) {
      if (seen[pr[j]] == 0) {
        temp += ap[pr[j]] * 1LL * cnt[pr[j]];
        temp %= MOD;
        seen[pr[j]] = 1;
      }
    }
    temp %= MOD;
    temp *= ((M - i + 1) % MOD);
    temp %= MOD;
    for (j = 1; j <= Q; j++) {
      temp += ap[ar[j]];
      temp %= MOD;
    }
    temp %= MOD;
    ans += temp;
    ans %= MOD;
    for (j = 1; j <= N; j++) {
      seen[pr[j]] = 0;
    }
    now = 0;
    for (j = 1; j <= N; j++) {
      if (seen[pr[j]] == 0) {
        now += ap[pr[j]] * 1LL * cnt[pr[j]];
        now %= MOD;
        ap[pr[j]] = now;
        seen[pr[j]] = 1;
      }
    }
    for (j = 1; j <= N; j++) {
      seen[pr[j]] = 0;
    }
  }
  cout << ans % MOD << endl;
}
