#include <bits/stdc++.h>
using namespace std;
const int N = 1001000;
long long n, l, k;
long long a[N], cont[N], MOD = 1e9 + 7, ans;
set<long long> comp;
map<long long, long long> f;
long long q, r;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cerr.tie(NULL);
  cin >> n >> l >> k;
  q = l / n, r = l % n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    comp.insert(a[i]);
  }
  long long cnt = 0;
  for (__typeof(comp.begin()) it(comp.begin()); it != comp.end(); it++) {
    f[*it] = cnt++;
  }
  for (int i = 0; i < n; i++) {
    a[i] = f[a[i]];
    cont[a[i]]++;
  }
  long long dp[cnt][k + 1];
  for (int i = 0; i < cnt; i++) {
    for (int j = 0; j <= k; j++) {
      dp[i][j] = (j == 0);
    }
  }
  for (int i = 1; i <= k; i++) {
    dp[0][i] = (dp[0][i - 1] * cont[0]) % MOD;
    if (n * i <= l) {
      ans = (ans + (dp[0][i] * ((q - i + 1) % MOD)) % MOD) % MOD;
    }
  }
  for (int i = 1; i < cnt; i++) {
    for (int j = 1; j <= k; j++) {
      long long t1 = (dp[i][j - 1] * cont[i]) % MOD;
      dp[i][j] = (dp[i - 1][j] + t1) % MOD;
      if (j * n <= l) {
        long long t2 = (t1 * ((q - j + 1) % MOD)) % MOD;
        ans = (ans + t2) % MOD;
      }
    }
  }
  for (int i = 0; i < r; i++) {
    for (int j = 1; j <= k; j++) {
      if ((j - 1) * n <= l) {
        ans = (ans + dp[a[i]][j - 1]) % MOD;
      }
    }
  }
  cout << ans << '\n';
  return 0;
}
