import Data.List import Control.Monad main = do vs <- sort . map read . words <$> getLine print (ita vs) ita vs@[v1,v2,v3,v4] = max 4 $ min ((+3) $ minimum' $ concat [nboards v1 v2 v3, nboards v1 v3 v4, nboards v2 v3 v4]) (2 + div vx gm + div vy gm) where (gm,(vx,vy)) = maximum [(gcd vx vy, (vx,vy)) | vx <- vs, vy <- (delete vx vs)] minimum' xs = if null xs then 0 else minimum xs nboards x y l = do i <- [1 .. div l x] j <- [1 .. div (l - i*x) y] guard (i*x + j*y == l) return (i + j)