'use strict'
let input = require("fs").readFileSync("/dev/stdin", "utf8");
// 必要な変数に定義する
input = input.split('\n');
let info = input.shift();
let N = info.split(' ')[0]*1;
let C = info.split(' ')[1]*1;
let K = info.split(' ')[2]*1;
let ans = 0;
// 並べ替えられた
let arr = input.sort((a,b)=>{return a-b});

// バス
let busride = [];
// 乗る人
let rideman;

// 繰り返し処理
while(arr.length > 0){
  	// 誰も乗っていなかった時は1人乗せる
  	if(busride[0] == undefined){
    	busride[0] = arr.shift();
    }
  	rideman = arr[0]*1;
  	// 最初に乗ったお客さんの我慢の限界処理
  	if(rideman < busride[0]*1 + K){
      	busride.push(arr.shift());
      // 乗客数について限界が来た時の処理
      if(busride.length % C == 0){
        ans++;
        busride = [];
      }
    } else {
      // バス出発
      ans++;
      busride = [];
    }
}

// 最終バスの処理
if(busride.length > 0){
	ans++;
}

 console.log(ans);