{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BangPatterns #-}

import           Control.Monad.State
import qualified Data.ByteString.Char8        as B

type Parser a = StateT B.ByteString Maybe a

parseInt :: Parser Int
parseInt = StateT $ B.readInt . B.dropWhile ((==) ' ')

readParser :: Parser a -> IO a
readParser p = maybe (error "parser error") fst . runStateT p <$> B.getLine

data Player = Takahashi | Aoki

main :: IO ()
main = do
  (a, b, c, d) <- readParser $ (,,,) <$> parseInt <*> parseInt <*> parseInt <*> parseInt
  B.putStrLn $ case solve a b c d of
    Takahashi -> "Yes"
    Aoki      -> "No"

solve :: Int -> Int -> Int -> Int -> Player
solve a b c d = go a c Takahashi
  where
    go !a !c Takahashi
      | c <= 0    = Takahashi
      | otherwise = go a (c - b) Aoki
    go !a !c Aoki
      | a <= 0    = Aoki
      | otherwise = go (a - d) c Takahashi
