import qualified Data.Vector.Unboxed as VU
import qualified Data.ByteString.Char8 as B
import Data.Char

toTriple :: B.ByteString -> (Int, Int, Int)
toTriple bs =
    let
        Just (a, bs') = B.readInt bs
        Just (b, bs'') = B.readInt $ B.dropWhile isSpace bs'
        Just (c, _) = B.readInt $ B.dropWhile isSpace bs''
    in
        (a, b, c)

solve :: VU.Vector ((Int, Int, Int), (Int, Int, Int)) -> String
solve vec
    | VU.null vec = "Yes"
    | dist > limit = "No"
    | even dist && even limit = solve (VU.tail vec)
    | odd dist  && odd limit = solve (VU.tail vec)
    | otherwise = "No"
    where
        ((sc,sy,sx),(gc,gy,gx)) = VU.head vec
        dist = abs (sy-gy) + abs (sx-gx)
        limit = gc - sc

main = do
    n <- readLn :: IO Int
    txys <- VU.replicateM n (toTriple <$> B.getLine)
    putStrLn $ solve (VU.zip (VU.cons (0,0,0) txys) txys)