main :: IO()
main = do
    a <- readLn
    b <- readLn
    c <- readLn
    x <- readLn
    print $ gohyakuen a b c x



--500円玉の枚数を１つずつマッチさせて、hyakuenを呼ぶ
gohyakuen :: Int -> Int -> Int -> Int -> Int
gohyakuen maisuu500 maisuu100 maisuu50 coinSum
    | maisuu500 == 0				= hyakuen maisuu100 maisuu50 coinSum
    | coinSum < 500					= hyakuen maisuu100 maisuu50 coinSum
    | otherwise						= hyakuen maisuu100 maisuu50 (coinSum - 500) + gohyakuen (maisuu500 - 1) maisuu100 maisuu50 (coinSum - 500)


--100円玉の枚数を一つずつマッチさせて、gojuuennを呼ぶ。
hyakuen :: Int -> Int -> Int -> Int
hyakuen maisuu100 maisuu50 coinSum
    | maisuu100 == 0			= gojuuen maisuu50 coinSum
    | coinSum < 100				= gojuuen maisuu50 coinSum
    | otherwise					= gojuuen maisuu50 (coinSum - 100) + hyakuen (maisuu100 - 1) maisuu50 (coinSum - 100)


--50円玉の枚数と残り残高　表現できるなら1,表現できないなら0を返す。
gojuuen :: Int -> Int -> Int
gojuuen maisuu coinSum = if (a && b) then 1 else 0
    where a = (mod coinSum 50 == 0)
          b = (50 * maisuu >= coinSum)



