#include <bits/stdc++.h>
using namespace std;
const int MOD(1000000007);
const int INF((1 << 30) - 1);
const int MAXN(1000005);
int a[MAXN], b[MAXN];
vector<int> dp[MAXN];
int sum[MAXN];
int main() {
  int n, k;
  long long l;
  scanf("%d%I64d%d", &n, &l, &k);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    b[i] = a[i];
  }
  int N = l % n;
  sort(a, a + n);
  sort(b, b + N);
  int m = min(l / n, k * 1ll);
  long long ans = 0, B = l / n % MOD;
  if (m > 0) {
    for (int i = 0; i < n; i++) dp[i].resize(m + 1);
    for (int i = 0; i < n; i++) dp[i][0] = 1;
    sum[0] = n;
    ans += n * 1ll * B;
    ans %= MOD;
    for (int j = 1; j <= m - 1; j++) {
      int tmp = 0;
      for (int i = 0, p = 0; i < n; i = p) {
        while (p < n && a[p] == a[i]) {
          tmp += dp[p][j - 1];
          tmp %= MOD;
          p++;
        }
        for (int r = i; r <= p - 1; r++) {
          dp[r][j] += tmp;
          dp[r][j] %= MOD;
          sum[j] += dp[r][j];
          sum[j] %= MOD;
        }
      }
      ans += sum[j] * 1ll * (B - j);
      ans %= MOD;
    }
  }
  ans += N;
  ans %= MOD;
  if (min(m, k - 1) > 0) {
    for (int j = 1; j <= min(m, k - 1); j++) {
      int p = 0, tmp = 0;
      for (int i = 0; i < N; i++) {
        while (p < n && a[p] <= b[i]) {
          tmp += dp[p][j - 1];
          tmp %= MOD;
          p++;
        }
        ans += tmp;
        ans %= MOD;
      }
    }
  }
  printf("%I64d", (ans + MOD) % MOD);
}
