#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
const long long oo = 1e16 + 5;
long long m[N][20], M[N][20];
long long n, s, l;
long long dis(long long L, long long R) {
  long long k = log2(R - L + 1);
  R = R - (1 << k) + 1;
  return max(M[L][k], M[R][k]) - min(m[L][k], m[R][k]);
}
long long it[4 * N];
void update(long long i, long long l, long long r, long long pos,
            long long val) {
  if (l > pos || r < pos || l > r) return;
  if (l == r) {
    it[i] = val;
    return;
  }
  long long m = (l + r) / 2;
  update(i * 2, l, m, pos, val);
  update(i * 2 + 1, m + 1, r, pos, val);
  it[i] = min(it[i * 2], it[i * 2 + 1]);
}
long long get(long long i, long long l, long long r, long long a, long long b) {
  if (l > b || r < a || l > r) return 1e9 + 7;
  if (a <= l && r <= b) return it[i];
  long long m = (l + r) / 2;
  return min(get(i * 2, l, m, a, b), get(i * 2 + 1, m + 1, r, a, b));
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> s >> l;
  for (long long i = 1; i <= n; ++i) {
    long long x;
    cin >> x;
    m[i][0] = M[i][0] = x;
  }
  for (long long i = 0; i < 16; ++i)
    for (long long j = 1; j + (1 << (i + 1)) <= n + 1; ++j) {
      m[j][i + 1] = min(m[j][i], m[j + (1 << i)][i]);
      M[j][i + 1] = max(M[j][i], M[j + (1 << i)][i]);
    }
  for (long long i = 1; i <= n; ++i) {
    if (i < l || dis(i - l + 1, i) > s) {
      update(1, 0, n, i, n + 1);
      continue;
    }
    long long be = 1, en = i - l + 1;
    while (be != en) {
      long long mi = (be + en) / 2;
      if (dis(mi, i) <= s)
        en = mi;
      else
        be = mi + 1;
    }
    long long val = get(1, 0, n, be - 1, i - l) + 1;
    update(1, 0, n, i, val);
  }
  long long ans = get(1, 0, n, n, n);
  if (ans > n) ans = -1;
  cout << ans << endl;
}
