#include <bits/stdc++.h>
using namespace std;
const int mxn = 1e6 + 6, md = 1e9 + 7;
int n, k;
long long l, ans, a[mxn], dp[mxn], s[mxn];
pair<int, int> p[mxn];
inline void add(long long& x, long long y) {
  x += y;
  if (x >= md) x -= md;
}
int main() {
  scanf("%d%lld%d", &n, &l, &k);
  for (int i = 0; i < n; ++i) scanf("%lld", a + i);
  for (int i = 0; i < n * k; ++i) p[i] = {a[i % n], i};
  sort(p, p + n * k);
  for (int i = 0; i < n * k; ++i) {
    dp[p[i].second] = (p[i].second < n) ? 1 : s[p[i].second / n - 1];
    add(s[p[i].second / n], dp[p[i].second]);
    if (p[i].second < l)
      add(ans, ((l - p[i].second - 1) / n + 1) % md * dp[p[i].second] % md);
  }
  printf("%lld\n", ans);
}
