#include"bits/stdc++.h"
using namespace std;
#define ff              first
#define ss              second
#define int             long long
#define ll              long long
#define pb              push_back
#define pii             pair<int,int>
#define vi              vector<int>
#define mii             map<int,int>
#define rep(i,n)        for(int i=0;i<n;i++)
#define MOD 1000000007
#define endl '\n'
//=============================================================================================================================================================================================================
ll gcd(ll a, ll b) {if (b > a) {return gcd(b, a);} if (b == 0) {return a;} return gcd(b, a % b);}
ll expo(ll a, ll b, ll mod) {ll res = 1; while (b > 0) {if (b & 1)res = (res * a) % mod; a = (a * a) % mod; b = b >> 1;} return res;}
void extendgcd(ll a, ll b, ll*v) {if (b == 0) {v[0] = 1; v[1] = 0; v[2] = a; return ;} extendgcd(b, a % b, v); ll x = v[1]; v[1] = v[0] - v[1] * (a / b); v[0] = x; return;} //pass an arry of size1 3
ll mminv(ll a, ll b) {ll arr[3]; extendgcd(a, b, arr); return arr[0];} //for non prime b
ll mminvprime(ll a, ll b) {return expo(a, b - 2, b);}
inline ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
ll mod_div(ll a, ll b, ll m) {a = a % m; b = b % m; return (mod_mul(a, mminvprime(b, m), m) + m) % m;}
// cout<<fixed<<<<setprecision(9)<<ans<<endl;
// lower_bound(start_ptr, end_ptr, num) slow hota hai ye wala
// upper_bound(start_ptr, end_ptr, num)
//================================================================================================================================================================================================================
int ceil(int a, int b) {
	if (a % b == 0)return a / b;
	else {
		return a / b + 1;
	}
}

int32_t main()
{
#ifndef ONLINE_JUDGE
	freopen("output1.txt", "w", stderr);
#endif
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	int tc = 1;
	// cin >> tc;
	while (tc--) {
		int n, k, x;
		cin >> n >> k >> x;
		int a[n];
		rep(i, n)cin >> a[i]; sort(a, a + n);
		vector<pii> break_points;
		for (int i = 0; i < n - 1; i++) {
			if (a[i + 1] - a[i] > x)break_points.pb({a[i + 1] - a[i], i});
		}
		sort(break_points.begin(), break_points.end());
		int count = break_points.size();
		// cout << count << endl;
		for (auto it : break_points) {
			int req = ceil(it.ff , x) - 1;
			if (req <= k) {
				count--;
				k -= req;
			}
		}
		cout << count + 1 << endl;
	}
	cin.clear();
	cin.get();
	return 0;
}