#include <bits/stdc++.h>
using namespace std;
long long n, k, a[3000100], b[3000100];
long long l, ans = 0, f[3000100], g[3000100];
long long safe(long long n) {
  if (n < 0) n = n + ((-n) / 1000000007 + 1) * 1000000007;
  n %= 1000000007;
  return n;
}
int main() {
  scanf("%lld%lld%lld", &n, &l, &k);
  for (int i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    b[i] = a[i];
  }
  sort(b, b + n);
  long long cnt = (l / n + int(l % n != 0));
  long long tmp = l % n;
  long long she = (l / n) % 1000000007;
  if (cnt < k) k = cnt;
  for (long long i = 0; i < k; i++) {
    if (!i) {
      ans += tmp;
      for (int j = 0; j < n; j++) {
        f[j] = 1;
        g[j] = j + 1;
      }
      ans += safe(g[n - 1] * safe(she - i));
      if (ans >= 1000000007) ans %= 1000000007;
    } else {
      for (int j = 0; j < tmp; j++) {
        int ls = 0, rs = n;
        while (ls + 1 < rs) {
          int mid = (ls + rs) / 2;
          if (b[mid] <= a[j])
            ls = mid;
          else
            rs = mid;
        }
        ans += g[ls];
        if (ans >= 1000000007) ans %= 1000000007;
      }
      int k = 0;
      for (int j = 0; j < n; j++) {
        while (k < n - 1 && b[k + 1] <= b[j]) k++;
        f[j] = g[k];
        if (j == 0)
          g[j] = f[j];
        else
          g[j] = safe(g[j - 1] + f[j]);
      }
      ans += safe(g[n - 1] * safe(she - i));
      if (ans >= 1000000007) ans %= 1000000007;
    }
  }
  ans %= 1000000007;
  printf("%lld", ans);
  return 0;
}
