#include <bits/stdc++.h>
using namespace std;
typedef struct node {
  long long s, e;
} node;
int main() {
  int m, t, r;
  cin >> m >> t >> r;
  long long ans = 0;
  vector<int> w(m);
  for (int i = 0; i < m; i++) {
    cin >> w[i];
  }
  if (t < r) {
    ans = -1;
  } else {
    int cs = w[0] - r + 1, ce = cs + t - 1;
    vector<node> candles;
    for (int i = 0; i < r; i++) {
      node temp;
      temp.s = cs + i;
      temp.e = temp.s + t - 1;
      candles.push_back(temp);
    }
    for (int i = 0; i < m; i++) {
      int ins = 0;
      int ine = candles.size() - 1;
      while (ins < ine) {
        int mid = (ins + ine) / 2;
        if (candles[mid].e < w[i]) {
          ins = mid + 1;
        } else {
          ine = mid;
        }
      }
      if (ins <= ine && candles[ine].e >= w[i]) {
        int req = r - (candles.size() - ine);
        cs = w[i] - req + 1;
        for (int i = 0; i < req; i++) {
          node temp;
          temp.s = cs + i;
          temp.e = temp.s + t - 1;
          candles.push_back(temp);
        }
      } else {
        int req = r;
        cs = w[i] - req + 1;
        for (int i = 0; i < req; i++) {
          node temp;
          temp.s = cs + i;
          temp.e = temp.s + t - 1;
          candles.push_back(temp);
        }
      }
    }
    ans = candles.size();
  }
  cout << ans << endl;
}
