#include <bits/stdc++.h>
using namespace std;
long long int add(long long int x, long long int y) {
  x += y;
  while (x >= 1000000007) x -= 1000000007;
  while (x < 0) x += 1000000007;
  return x;
}
long long int mul(long long int x, long long int y) {
  return (x * 1ll * y) % 1000000007;
}
long long int binpow(long long int x, long long int y) {
  long long int z = 1;
  while (y) {
    if (y & 1) z = mul(z, x);
    x = mul(x, x);
    y >>= 1;
  }
  return z;
}
long long int inv(long long int x) { return binpow(x, 1000000007 - 2); }
long long int divide(long long int x, long long int y) {
  return mul(x, inv(y));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1;
  while (t--) {
    int n, m, k;
    cin >> n >> m >> k;
    int arr[n];
    for (int i = 0; i < n; i++) cin >> arr[i];
    set<int> mark;
    int cnt[302] = {0};
    int ans = 0;
    for (int i = 0; i < n; i++) {
      int idx = arr[i] - 1;
      int val = cnt[arr[i]];
      int req = k - val;
      while (req > 0) {
        if (idx + m < arr[i]) break;
        if (mark.find(idx) != mark.end()) {
          idx--;
          continue;
        }
        mark.insert(idx);
        req--;
        ans++;
        for (int kk = max(0, idx + 1); kk < min(302, idx + 1 + m); kk++)
          cnt[kk]++;
        idx--;
      }
      if (req > 0) {
        cout << -1;
        return 0;
      }
    }
    cout << ans;
  }
  return 0;
}
