#include <bits/stdc++.h>
using namespace std;
int n, s, ll, v[100011];
int dp[100011];
const int oo = 1 << 28;
int seg[400001];
int at, l, r;
void add(int n, int s, int e) {
  if (at < s || at > e || s > e) return;
  if (s == e) {
    seg[n] = dp[s];
    return;
  }
  add(n * 2, s, (s + e) / 2);
  add(n * 2 + 1, (s + e) / 2 + 1, e);
  seg[n] = min(seg[n * 2], seg[n * 2 + 1]);
}
int get(int n, int s, int e) {
  if (l > e || r < s || l > r || s > e) return oo;
  if (s >= l && e <= r) return seg[n];
  return min(get(n * 2, s, (s + e) / 2), get(n * 2 + 1, (s + e) / 2 + 1, e));
}
int main() {
  scanf("%d%d%d", &n, &s, &ll);
  for (int i = 1; i <= n; ++i) scanf("%d", v + i);
  set<pair<int, int> > q;
  int E = n;
  for (int i = n; i > 0; --i) {
    dp[i] = oo;
    q.insert(make_pair(v[i], i));
    while ((--q.end())->first - q.begin()->first > s) {
      q.erase(make_pair(v[E], E));
      --E;
    }
    l = i + ll;
    r = E + 1;
    if (r >= l) {
      if (r == n + 1)
        dp[i] = 1;
      else
        dp[i] = min(dp[i], 1 + get(1, 1, n));
    }
    at = i;
    add(1, 1, n);
  }
  if (dp[1] > 500000) dp[1] = -1;
  printf("%d\n", dp[1]);
  return 0;
}
