#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 4;
int n, k, b[N], vis[N];
long long l, dp[N], temp[N];
const long long mod = 1e9 + 7;
struct node {
  friend bool operator<(node x, node y) {
    if (x.a == y.a) return x.pos < y.pos;
    return x.a < y.a;
  }
  int a, pos;
};
node po[N];
int main() {
  cin >> n >> l >> k;
  for (int i = 0; i < n; i++) {
    scanf("%d", &po[i].a);
    po[i].pos = i;
  }
  sort(po, po + n);
  po[n].a = po[n - 1].a + 10;
  for (int i = n - 1; i >= 0; i--) {
    if (po[i].a == po[i + 1].a)
      vis[i] = vis[i + 1];
    else
      vis[i] = i;
    b[po[i].pos] = i;
  }
  for (int i = 0; i < n; i++) {
    dp[i] = 1;
  }
  long long ans = l, sum, fn = (long long)n;
  ans %= mod;
  for (int i = 2; i <= k; i++) {
    temp[0] = dp[0];
    for (int j = 1; j < n; j++) {
      temp[j] = temp[j - 1] + dp[j];
      temp[j] %= mod;
    }
    sum = 0;
    for (int j = 0; j < n; j++) {
      dp[j] = temp[vis[j]];
      sum += dp[j];
      sum %= mod;
    }
    if (l % fn == 0) {
      if (i <= l / fn) {
        ans += ((l / fn - i + 1) % mod) * sum;
        ans %= mod;
      }
    } else {
      if (i <= l / fn) {
        ans += ((l / fn - i + 1) % mod) * sum;
        ans %= mod;
        sum = 0;
        for (int j = 0; j < l % fn; j++) {
          sum += dp[b[j]];
          sum %= mod;
        }
        ans += sum;
        ans %= mod;
      } else if (i == l / fn + 1) {
        sum = 0;
        for (int j = 0; j < l % fn; j++) {
          sum += dp[b[j]];
          sum %= mod;
        }
        ans += sum;
        ans %= mod;
      }
    }
  }
  cout << ans % mod << "\n";
  return 0;
}
