import Control.Applicative( (<$>))
import Data.List( sort)
import Control.Monad( replicateM)
main = do
    [n_, c_, k_] <- map read . words <$> getLine
    ts_ <- replicateM n_ readLn::IO [Int]
    let
	sortedT = sort ts_

	bus total onbus	_	[]	    
	  | onbus > 0			    = total+1
	  | otherwise			    = total
	bus total onbus limt times@(t:ts)   = case limt of

	    Nothing	-> bus total (onbus+1) (Just$t+k_) ts
	    Just lim    -> if t <= lim
			    then if onbus<c_
				    then bus total (onbus+1) (Just lim) ts
				    else bus (total+1) 0 Nothing times
			    else bus (total+1) 0 Nothing times
    print $ bus 0 0 Nothing sortedT