#include <bits/stdc++.h>
using namespace std;
const long long mod = (int)1e9 + 7;
struct node {
  long long v, i;
  bool f;
  bool operator<(node a) const { return v < a.v; }
} a[1000005];
long long i, i0, n, l, k, m, dp[1000005], ans[1000005], r[1000005], res = 0;
int main() {
  scanf("%lld %lld %lld", &n, &l, &k);
  m = l % n;
  for (i = 0; i < n; i++) {
    scanf("%lld", &a[i].v);
    a[i].f = (i < m), a[i].i = i;
  }
  sort(a, a + n);
  dp[0] = 1;
  for (i = 1; i <= min(k, l / n + 1); i++) {
    ans[i] = r[i] = 0;
    long long tmp = 0, p = 0;
    for (i0 = 0; i0 < n; i0++) {
      while (p < n && a[p].v <= a[i0].v) tmp += dp[p++];
      tmp %= mod;
      dp[i0] = tmp, ans[i] += dp[i0];
    }
    ans[i] %= mod;
    for (i0 = 0; i0 < n; i0++)
      if (!a[i0].f) r[i] += dp[i0];
    r[i] %= mod;
  }
  for (i = 1; i <= min(k, l / n + 1); i++) {
    res += ans[i] * ((l / n + 2 - i) % mod) % mod;
    res -= r[i];
    res %= mod, res += mod, res %= mod;
  }
  printf("%lld\n", res);
  return 0;
}
