#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 8;
const long long maxm = 1e7 + 8;
int a[maxn], st_min[maxn][16], st_max[maxn][16], dp[maxn];
void st_pretreat(int n, int s) {
  for (register int i = 1; i <= n; i = i + 1)
    st_max[i][0] = a[i], st_min[i][0] = a[i];
  for (int j = 1; (1 << j) <= n; j++) {
    for (int i = 1; i + (1 << j) - 1 <= n; i++) {
      st_min[i][j] = min(st_min[i][j - 1], st_min[i + (1 << (j - 1))][j - 1]);
      st_max[i][j] = max(st_max[i][j - 1], st_max[i + (1 << (j - 1))][j - 1]);
    }
  }
}
int query(int l, int r) {
  int len = log2(r - l + 1);
  return max(st_max[l][len], st_max[r - (1 << len) + 1][len]) -
         min(st_min[l][len], st_min[r - (1 << len) + 1][len]);
}
int n, s, l;
void __dp() {
  int pre = 0;
  memset(dp, 0x3f3f3f3f, sizeof(dp));
  dp[0] = 0;
  for (register int i = 1; i <= n; i = i + 1) {
    while (i - pre >= l && query(pre + 1, i) > s || dp[pre] == 0x3f3f3f3f)
      pre++;
    if (i - pre >= l) dp[i] = min(dp[i], dp[pre] + 1);
  }
}
int main() {
  scanf("%d%d%d", &n, &s, &l);
  for (register int i = 1; i <= n; i = i + 1) scanf("%d", &a[i]);
  st_pretreat(n, s);
  __dp();
  printf("%d", dp[n] == 0x3f3f3f3f ? -1 : dp[n]);
  return 0;
}
