#include <bits/stdc++.h>
using namespace std;
const int MXN = (int)1e6 + 10;
const int INF = (int)1e9 + 7;
const long long LINF = (long long)1e18;
const double EPS = (double)1e-9;
int n, k;
long long l;
int a[MXN];
int p[MXN];
vector<int> d[MXN];
int ans;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> l >> k;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  for (int i = 0; i <= n; ++i) {
    p[i] = i;
  }
  sort(p, p + n, [](int i, int j) { return a[i] < a[j]; });
  for (int i = 0; i < n; ++i) {
    d[i].resize(k + 1);
    d[i][1] = 1;
  }
  int ptr;
  int sum;
  for (int i = 2; i <= k; ++i) {
    ptr = 0;
    sum = 0;
    for (int j = 0; j < n; ++j) {
      while (ptr < n && a[p[ptr]] <= a[p[j]]) {
        sum = (sum + 0LL + d[p[ptr++]][i - 1]) % INF;
      }
      d[p[j]][i] = sum;
    }
  }
  long long b_num = l / (1LL * n);
  for (int i = 0; i < n; ++i) {
    for (int j = 1; j <= k; ++j) {
      if (1LL * j > b_num) break;
      ans = (ans + (d[i][j] * 1LL * (b_num % INF + 1LL - j) % INF));
      ans %= INF;
      if (ans < 0LL) ans += INF;
    }
  }
  int tmp = (int)(l % (1LL * n));
  for (int i = 0; i < tmp; ++i) {
    for (int j = 1; j <= k; ++j) {
      if (b_num + 1LL < 1LL * j) break;
      ans = (ans + 1LL * d[i][j]) % INF;
    }
  }
  cout << ans;
  return 0;
}
