#include<bits/stdc++.h>
#define read(arr, n)    vector<int> arr(n); for(int i=0; i<n; i++)  cin >> arr[i];
#define fr(x,s,e)       for(auto x=s-(s>e);x!=e-(s>e);(s<e)?x++:x--)
// #define fr(i, m, n)     for(int i=m;i<n;i++)
#define pii             pair<int, int> 
#define all(x)          x.begin(), x.end()
#define ub              upper_bound
#define lb              lower_bound
#define umap            unordered_map
#define pb              push_back
#define F               first
#define S               second
#define I               insert
#define mod             1000000007
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;

#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define set_bits __builtin_popcountll

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif
void file(){
        fastio;
        #ifndef ONLINE_JUDGE
                // freopen("input.txt", "r", stdin);
                // freopen("o1.txt", "w", stdout);
                freopen("error.txt", "w", stderr);
        #endif
}

void _print(ll t) {cerr << t;}
void _print(int t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(lld t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(ull t) {cerr << t;}

template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T> void _print(set <T, greater<int>> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.F); cerr << ","; _print(p.S); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T, greater<T>> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";}cerr << "]";}
template <class T> void _print(multiset <T> v){cerr << "[ "; for (T i : v){_print(i); cerr << " ";}cerr << "]";}
template <class T, class V> void _print(map <T, V> v){cerr << "[ "; for (auto i : v){_print(i); cerr << " ";}cerr << "]";}
template <class T, class V> void _print(multimap <T, V> v){cerr << "[ "; for (auto i : v){_print(i); cerr << " ";}cerr << "]";}


#define YES             cout<<"YES"<<endl
#define NO              cout<<"NO"<<endl
#define Yes             cout<<"Yes"<<endl
#define No              cout<<"No"<<endl
#define yes             cout<<"yes"<<endl
#define no              cout<<"no"<<endl
#define IM        INT_MAX
#define Im        INT_MIN
// #define int       ll
// #define IM        LLONG_MAX`
// #define Im        LLONG_MIN
// #define IM           18446744073709551615
// const int m = 998244353;
// vector<vector<int>> mat(n, vector<int> (n, 0));
void solve();
signed main() {
      file();
      int test = 1;
      // cin >> test;
      while(test--) {
            solve();
      }
}

const int M = 998244353;
vector<ll> ar;
int n, m, ans = 0;


void solve() {

      ll n, k, x;
      cin >> n >> k >> x;
      ar.resize(n);
      for(ll &x : ar) cin >> x;
      sort(all(ar));
      vector<ll> v;
      for(int i=1; i<n; i++) {
            ll diff = ar[i]-ar[i-1];
            if(ar[i]-ar[i-1]>x) {
                  v.pb(ar[i]-ar[i-1]);
            }
      }
      sort(all(v));
      ll ans = v.size()+1;
      debug(v);

      for(ll y : v) {
            ll diff = (y+x-1)/x - 1LL;
            if(k>=diff) {
                  ans--;
                  k -= diff;
            }
      }

      cout << ans << endl;
}