#include <bits/stdc++.h>
using namespace std;
int STmin[100007][17], STmax[100007][17], pw[17], a[100007], dp[100007];
int t[4 * 100007];
int RZ(int ll, int rr) {
  int k;
  k = (int)(log2(rr - ll + 1));
  return max(STmax[ll][k], STmax[rr - pw[k] + 1][k]) -
         min(STmin[ll][k], STmin[rr - pw[k] + 1][k]);
}
void build(int v, int tl, int tr) {
  int tm;
  if (tl == tr) {
    t[v] = 10000007;
    return;
  }
  tm = (tl + tr) >> 1;
  build(v * 2, tl, tm);
  build(v * 2 + 1, tm + 1, tr);
  t[v] = min(t[v * 2], t[v * 2 + 1]);
}
void update(int v, int tl, int tr, int pos, int z) {
  int tm;
  if (tl == tr) {
    t[v] = z;
    return;
  }
  tm = (tl + tr) >> 1;
  if (pos <= tm) {
    update(v * 2, tl, tm, pos, z);
  } else {
    update(v * 2 + 1, tm + 1, tr, pos, z);
  }
  t[v] = min(t[v * 2], t[v * 2 + 1]);
}
int query(int v, int tl, int tr, int ll, int rr) {
  int tm;
  if ((tl == ll) && (tr == rr)) return t[v];
  tm = (tl + tr) >> 1;
  if (tm >= rr) return query(v * 2, tl, tm, ll, rr);
  if (tm < ll) return query(v * 2 + 1, tm + 1, tr, ll, rr);
  return min(query(v * 2, tl, tm, ll, tm),
             query(v * 2 + 1, tm + 1, tr, tm + 1, rr));
}
int main() {
  int i, n, s, l, j, lg, rg, mid, ans;
  pw[0] = 1;
  for (i = 1; i < 17; i++) pw[i] = pw[i - 1] * 2;
  ios_base::sync_with_stdio(false);
  cin >> n >> s >> l;
  for (i = 1; i <= n; i++) cin >> a[i];
  for (i = 1; i <= n; i++) {
    STmin[i][0] = STmax[i][0] = a[i];
  }
  for (i = 1; i <= (int)(log2(n)); i++) {
    for (j = 1; j <= (n - pw[i] + 1); j++) {
      STmin[j][i] = min(STmin[j][i - 1], STmin[j + pw[i - 1]][i - 1]);
      STmax[j][i] = max(STmax[j][i - 1], STmax[j + pw[i - 1]][i - 1]);
    }
  }
  build(1, 0, n);
  update(1, 0, n, 0, 0);
  dp[0] = 0;
  for (i = 1; i < l; i++) dp[i] = 10000007;
  for (i = l; i <= n; i++) {
    lg = 0;
    rg = i + 1;
    while ((lg + 1) < rg) {
      mid = (lg + rg) >> 1;
      if (RZ(mid, i) <= s)
        rg = mid;
      else
        lg = mid;
    }
    if (lg == 0) lg++;
    if (RZ(lg, i) > s) lg++;
    lg--;
    rg = i - l;
    if (lg > rg) {
      dp[i] = 10000007;
      continue;
    }
    ans = query(1, 0, n, lg, rg);
    if (ans == 10000007) {
      dp[i] = 10000007;
      continue;
    }
    dp[i] = ans + 1;
    update(1, 0, n, i, ans + 1);
  }
  if (dp[n] == 10000007)
    cout << -1 << endl;
  else
    cout << dp[n] << endl;
  return 0;
}
