{-# OPTIONS_GHC -O #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}

import Control.Monad
import Data.Bits ((.&.), xor)
import Data.List
import qualified Data.Vector.Storable as V
import qualified Data.ByteString.Char8 as B

main = do
    [a,b,c,d] <- unfoldr (B.readInt.B.dropWhile (==' ')) <$> B.getLine
    case (a,b,c,d) of
        (a,_,c,d) | (abs (c-a) <= d) -> putStrLn "Yes"
        (a,b,c,d) | abs (c-b) <= d && abs(b-a) <= d -> putStrLn "Yes"
        _ -> putStrLn "No"