#include <bits/stdc++.h>
using namespace std;
const int N = 1000 * 1000 + 10, mod = 1000 * 1000 * 1000 + 7;
long long L;
long long n, k;
long long a[N], b[N];
vector<long long> v;
long long t[N], ja[N];
long long ans;
int num;
map<int, int> mp;
long long pw(long long x, long long k) {
  if (k == 0) return 1;
  long long r = pw(x, k / 2);
  r = r * r % mod;
  if (k & 1) r *= x;
  return r % mod;
}
void input() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ;
  cin >> n >> L >> k;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) b[i] = a[i];
  sort(a, a + n);
  for (int i = 0; i < n; i++) {
    if (i == 0 || a[i] != a[i - 1]) {
      mp[a[i]] = num;
      v.push_back(num);
      ja[num] = int(v.size());
      num++;
    }
    t[mp[a[i]]]++;
  }
  for (int i = 0; i < n; i++) b[i] = mp[b[i]];
}
int main() {
  input();
  long long B = L / n;
  long long dp[n + 10][k + 10];
  for (int l = 1; l <= min(B, (long long)k); l++) {
    dp[1][l] = pw(t[v[0]], l);
  }
  for (int i = 2; i <= int(v.size()); i++) {
    dp[i][1] = dp[i - 1][1] + t[v[i - 1]];
  }
  for (int i = 2; i <= int(v.size()); i++) {
    for (int l = 2; l <= min(B, (long long)k); l++) {
      dp[i][l] = (dp[i - 1][l] + dp[i][l - 1] * t[v[i - 1]]) % mod;
    }
  }
  for (int l = 1; l <= min(B, (long long)k); l++) {
    ans = (ans + (dp[int(v.size())][l] * ((B - l + 1) % mod) % mod)) % mod;
  }
  for (int i = 0; i < L % n; i++) {
    ans++;
    for (int l = 1; l <= min(B, (long long)k - 1); l++) {
      ans = (ans + dp[ja[b[i]]][l]) % mod;
    }
  }
  cout << ans % mod << endl;
}
