#include <bits/stdc++.h>
using namespace std;
int g[100000 + 30][20][2], f[100000 + 30], a[100000 + 30], n, s, l;
bool judge(int l, int r) {
  int k = log2(r - l + 1);
  return max(g[l][k][1], g[r - (1 << k) + 1][k][1]) -
             min(g[l][k][0], g[r - (1 << k) + 1][k][0]) <=
         s;
}
int main() {
  scanf("%d%d%d", &n, &s, &l);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  for (int i = 1; i <= n; ++i) g[i][0][0] = g[i][0][1] = a[i];
  for (int j = 1; j <= log2(n); ++j)
    for (int i = 1; i <= n - (1 << j) + 1; ++i)
      g[i][j][0] = min(g[i][j - 1][0], g[i + (1 << j - 1)][j - 1][0]),
      g[i][j][1] = max(g[i][j - 1][1], g[i + (1 << j - 1)][j - 1][1]);
  memset(f, 0x3f, sizeof(f));
  f[0] = 0;
  int k = 0, j;
  for (int i = 0; i <= n; ++i) {
    if (f[i] > n) continue;
    for (j = max(i + l, k); j <= n; ++j) {
      if (judge(i + 1, j))
        f[j] = f[j] > f[i] + 1 ? f[i] + 1 : f[j];
      else
        break;
    }
    k = j;
  }
  if (f[n] <= n)
    printf("%d\n", f[n]);
  else
    printf("-1\n");
}
