#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e6 + 10;
void add(long long &x, long long y) {
  x += y;
  x %= MOD;
}
pair<int, int> a[MAXN];
int b[MAXN];
long long dp[MAXN];
int main() {
  int n, k;
  long long l;
  while (scanf("%d%lld%d", &n, &l, &k) != EOF) {
    for (int i = 0; i < n; i++) {
      scanf("%d", &b[i]);
    }
    int m = n * k;
    for (int i = 0; i < m; i++) {
      a[i].first = b[i % n];
      a[i].second = i;
      dp[i] = 0;
    }
    sort(a, a + m);
    long long ans = l % MOD;
    int yu = l % n;
    for (int i = 0; i < m; i++) {
      int id = a[i].second;
      if (id < n) {
        add(dp[id / n], 1);
      } else {
        add(dp[id / n], dp[id / n - 1]);
      }
      if (id < l && id >= n) {
        long long cnt = (l - 1) / n - id / n + 1;
        if (yu && (id % n) > yu - 1) {
          cnt--;
        }
        add(ans, cnt % MOD * dp[id / n - 1] % MOD);
      }
    }
    printf("%lld\n", ans);
  }
  return 0;
}
