#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
const int N = 300;
const int M = 100005;
const int INF = 0x3f3f3f3f;
const long long INFLL = 0x3f3f3f3f3f3f3f3fLL;
const double pi = acos(-1.0);
int q1[M], q2[M], a[M], f[M], g[M];
int p1[M], p2[M];
int main() {
  int n, s, l;
  while (scanf("%d%d%d", &n, &s, &l) != EOF) {
    int maxx = -INF;
    int minn = INF;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
      maxx = max(maxx, a[i]);
      minn = min(minn, a[i]);
    }
    if (maxx - minn <= s) {
      printf("%d\n", l <= n ? 1 : -1);
      continue;
    }
    int be1 = 1, be2 = 1, end1 = 1, end2 = 1;
    for (int i = 1; i <= n; i++) {
      int t1 = i, t2 = i;
      while (end1 != be1 && a[i] >= a[q1[end1 - 1]]) {
        t1 = p1[--end1];
      }
      q1[end1] = i;
      p1[end1++] = t1;
      while (end2 != be2 && a[i] <= a[q2[end2 - 1]]) {
        t2 = p2[--end2];
      }
      p2[end2] = t2;
      q2[end2++] = i;
      while (be1 < end1 && be2 < end2 && a[q1[be1]] - a[q2[be2]] > s) {
        if (q1[be1] < q2[be2]) {
          be1++;
        } else if (q1[be1] > q2[be2]) {
          be2++;
        } else {
          be1++;
          be2++;
        }
      }
      g[i] = i - max(p1[be1], p2[be2]) + 1;
    }
    f[1] = 1;
    for (int i = 2; i <= n; i++) {
      int minn = INF;
      for (int j = i - g[i]; j <= i - l; j++) {
        if (f[j] < minn) {
          minn = f[j];
        }
      }
      if (minn == INF)
        f[i] = INF;
      else
        f[i] = minn + 1;
    }
    if (f[n] == INF)
      cout << -1 << endl;
    else
      cout << f[n] << endl;
  }
  return 0;
}
