//#include <bits/stdc++.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <map>
#include <cmath>
#include <vector>
#include <cstring>
#include <numeric>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <cctype>
using ll = long long;
using ull = unsigned long long;
using ld = long double;
#define all(v) (v).begin(), (v).end()
#define ii pair <int, int>
#define FORC(i, r, a) for(int i = 1; i <= r; cin >> (a)[i++])
#define FOR(i,l,r) for(int i = l; i <= r; ++i)
#define FOD(i,l,r) for(int i = l; i >= r; --i)
#define vt vector <int> 
#define mvt vector<vt>
#define rs resize
//#define taskname
const long long maxN = 1e6, oo = 1e9, MOD = 1e9 + 7;
using namespace std;
ll n, x, k;
vector <ll> a;
priority_queue <ll> pq;
void readInput() {
	cin >> n >> k >> x;
	FOR(i, 1, n) {
		ll t;
		cin >> t;
		a.push_back(t);
	}
	sort(all(a));
}

void process() {
	ll cnt = 1;
	FOR(i, 0, n - 2) {
		if (a[i + 1] - a[i] <= x) continue;
		else {
			ll dis = (a[i + 1] - a[i]);
			if (dis % x == 0) pq.push(-(dis / x - 1));
			else pq.push(-(dis / x));
			++cnt;
		}
	}
	while (!pq.empty() && k + pq.top() >= 0) {
		k += pq.top();
		pq.pop();
		--cnt;
	}
	cout << cnt;
}

void writeOutput() {
	
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	//freopen(taskname".INP", "r", stdin);
	//freopen(taskname".OUT", "w", stdout);
	readInput();
	process();
	writeOutput();
}
