#include <bits/stdc++.h>
using namespace std;
long long n, l, k;
const int N = 1000006;
int dp[2][N][2];
int b[N], b_rev[N];
map<int, int> mm;
const int mod = 1000000007;
long long cnt, blocks, lst;
long long ans = 0;
void calc() {
  for (int(i) = (0); i < (cnt); ++(i)) dp[0][i][0] = 1;
  int to = min(k, 1ll * blocks + 1);
  for (int(i) = (0); i < (to); ++(i)) {
    int cur = i & 1;
    int nxt = cur ^ 1;
    for (int(j) = (0); j < (n); ++(j)) {
      dp[nxt][b[j]][0] += dp[cur][b[j]][0];
      if (dp[nxt][b[j]][0] >= mod) dp[nxt][b[j]][0] -= mod;
      if (j < lst) {
        dp[nxt][b[j]][1] += dp[cur][b[j]][0];
        if (dp[nxt][b[j]][1] >= mod) dp[nxt][b[j]][1] -= mod;
      }
    }
    for (int(l) = (0); l < (2); ++(l)) {
      for (int(j) = (1); j < (cnt); ++(j)) {
        dp[nxt][j][l] += dp[nxt][j - 1][l];
        if (dp[nxt][j][l] >= mod) dp[nxt][j][l] -= mod;
        dp[cur][j][l] = 0;
      }
      dp[cur][0][l] = 0;
    }
    ans += ((blocks % mod - (i) + mod) * 1ll * dp[nxt][cnt - 1][0]) % mod;
    ans %= mod;
    ans += dp[nxt][cnt - 1][1];
    ans %= mod;
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> l >> k;
  for (int(i) = (0); i < (n); ++(i)) cin >> b[i];
  for (int(i) = (0); i < (n); ++(i)) mm[b[i]] = 1;
  cnt = 0;
  for (__typeof((mm).begin()) it = (mm).begin(); it != (mm).end(); it++)
    it->second = cnt++;
  for (int(i) = (0); i < (n); ++(i)) b[i] = mm[b[i]];
  blocks = l / n;
  lst = l % n;
  if (lst == 0) blocks--, lst = n;
  calc();
  cout << ans;
  return 0;
}
