#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int N = 1000010;
int n, m, nn, a[N], x[N], s[2][N];
long long l;
void GetData() {
  scanf("%d%I64d%ld", &n, &l, &m);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
    x[i] = a[i];
  }
}
void chkmod(int &x, int y) {
  x += y;
  if (x >= MOD) x -= MOD;
}
void Add(int sum[], int p, int v) {
  for (; p <= nn; p += (p & -p)) chkmod(sum[p], v);
}
int Ask(int sum[], int p) {
  int res = 0;
  for (; p > 0; p -= (p & -p)) chkmod(res, sum[p]);
  return res;
}
int Calc(int x, int y) {
  long long t = l / n;
  if (t * n + y + 1 <= l) t++;
  t -= x - 1;
  return t % MOD;
}
void Solve() {
  int i, j, val, now, pre, ans = 0;
  sort(x, x + n);
  nn = unique(x, x + n) - x;
  for (i = 0; i < n; ++i) a[i] = lower_bound(x, x + nn, a[i]) - x + 1;
  for (now = 0, i = 1; i <= m; ++i) {
    pre = now;
    now ^= 1;
    for (j = 1; j <= nn; ++j) s[now][j] = 0;
    for (j = 0; j < n; ++j) {
      if (i == 1) {
        val = 1;
        Add(s[now], a[j], 1);
      } else {
        val = Ask(s[pre], a[j]);
        Add(s[now], a[j], val);
      }
      if ((i - 1) * n + j + 1 <= l)
        chkmod(ans, (long long)val * Calc(i, j) % MOD);
    }
  }
  printf("%d\n", ans);
}
int main() {
  GetData();
  Solve();
  return 0;
}
