import Data.List

cannotCreateTriangle [a, b, c] = c >= a + b

readTriangle list = do
    line <- getLine
    let elem = sort (map read (words line)) :: [Int]
    if cannotCreateTriangle elem then return list
    else readTriangle (elem : list)

calculateDiscriminant [a, b, c] = c*c - b*b - a*a

main = do
    tris <- readTriangle []
    let dets = map calculateDiscriminant tris
    let res = [(length dets),
               (foldr (\x acc -> if x == 0 then (acc+1) else acc) 0 dets),
               (foldr (\x acc -> if x < 0 then (acc+1) else acc) 0 dets),
               (foldr (\x acc -> if x > 0 then (acc+1) else acc) 0 dets)]
    putStrLn (unwords (map show res))

