#include <bits/stdc++.h>
const long long base = 311, mod = 1e9 + 7, N = 1e5 + 5, inf = INT_MAX;
using ull = unsigned long long;
using namespace std;
long long n, s, l = 1, Max, Min, len, k, idx = 0, a[N], g[N], dp[N], mx[N][22],
                mn[N][22];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> s >> len;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (long long i = 1; i <= n; i++) {
    mx[i][0] = mn[i][0] = a[i];
  }
  for (long long j = 1; (1 << j) <= n; j++) {
    for (long long i = 1; i + (1 << j) - 1 <= n; i++) {
      mx[i][j] = max(mx[i][j - 1], mx[i + (1 << j - 1)][j - 1]);
      mn[i][j] = min(mn[i][j - 1], mn[i + (1 << j - 1)][j - 1]);
    }
  }
  for (long long r = 1; r <= n; r++) {
    k = (long long)log2(r - l + 1);
    Max = max(mx[l][k], mx[r - (1 << k) + 1][k]);
    Min = min(mn[l][k], mn[r - (1 << k) + 1][k]);
    while (Max - Min > s && l < r) {
      l++;
      k = log2(r - l + 1);
      Max = max(mx[l][k], mx[r - (1 << k) + 1][k]);
      Min = min(mn[l][k], mn[r - (1 << k) + 1][k]);
    }
    g[r] = l;
  }
  for (long long i = 1; i <= n; i++) {
    long long best = inf;
    dp[i] = inf;
    if (g[i] <= idx) {
      dp[i] = dp[i - 1];
      continue;
    }
    for (long long k = max(g[i] - 1, idx - 1); k <= i - len; k++) {
      if (best >= dp[k]) {
        best = dp[k];
        idx = k;
        if (!k) {
          idx = 1;
        }
      }
    }
    dp[i] = best + 1;
  }
  cout << (dp[n] >= inf ? -1 : dp[n]);
}
