module Main where

import Control.Applicative
import Numeric

main :: IO()
main = loop

loop :: IO ()
loop = do
  {[m, f, r] <- getInts
  ; if m == -1 && f == -1 && r == -1 then done
    else printGrade m f r
  
  
  -- ; if m == -1 && f == -1 && r == -1 then return ()
  --   else if m == -1 || f == -1 then putStrLn "F" >> loop
  --   else if m + f >= 80 then putStrLn "A" >> loop
  --   else if m + f >= 65 then putStrLn "B" >> loop
  --   else if m + f >= 50 then putStrLn "C" >> loop
  --   else if m + f >= 30 then putStrLn (if r >= 50 then "C" else "D") >> loop
  --   else putStrLn "F" >> loop
  }

done :: IO ()
done = return ()

printGrade :: Int -> Int -> Int -> IO ()
printGrade m f r  = putStrLn (grade m f r ) >> loop

grade :: Int -> Int -> Int ->String
grade m f r = if m == -1 || f == -1 then "F"
            else if mpf >= 80 then "A"
            else if mpf >= 65 then "B"
            else if mpf >= 50 then "C"
            else if mpf >= 30 then (if r >= 50 then "C" else "D")
            else "F"

  where
    mpf = m + f
                            
  
--

getInts :: IO [Int]
getInts = map read . words <$> getLine

putInts :: [Int] -> IO()
putInts = putStrLn . unwords . map show

getDoubles :: IO [Double]
getDoubles = map read . words  <$> getLine

putDoubles :: [Double] -> IO()
putDoubles = putStrLn . unwords . map showDouble

showDouble :: Double -> String
showDouble d = showFFloat Nothing d ""

