# 状態 0 # ... # ... # ... # u1 # o.. # ... # ... # d1 # ... # ... # o.. # u2 # o.. # o.. # ... # d2 # ... # o.. # o.. # uu # oo. # ... # ... # dd # ... # ... # oo. # 状態 -> 状態の必要コスト (l, j, o) # 0 -> # u1 (0,1,0) # d1 (1,0,0) # u2 (0,1,1) # d2 (1,0,1) # u1 -> # dd (0,1,0) # d2 (0,0,1) # d1 -> # uu (1,0,0) # u2 (0,0,1) # u2 -> # 0 (0,1,0) # u1 (2,0,0) # d2 -> # 0 (1,0,0) # d1 (0,2,0) # uu -> # 0 (0,0,1) # u2 (2,1,0),(0,3,0) # dd -> # 0 (0,0,1) # d2 (3,0,0),(1,2,0) # u2, d2, uu, dd については簡単に縮約ができ、以下のようなコストになる # 0 -> # u1 (0,1,0),(2,1,1) # d1 (1,0,0),(1,2,1) # 0 (0,2,1),(2,0,1) # u1 -> # 0 (0,1,1),(1,0,1),(4,1,0),(2,3,0) # d1 (0,2,1),(3,3,0),(1,5,0) # d1 -> # 0 (1,0,1),(0,1,1),(3,2,0),(1,4,0) # u1 (2,0,1),(5,1,0),(3,3,0) # 改めてパスを列挙 # ここら辺まで来たらコード書いて、他のコストの和で表せるものは省略するのが良い # 0 -> 0 # (0,2,1),(2,0,1) # 0 -> u1 -> 0 # (1,1,1),(4,2,0),(2,4,0) # 0 -> d1 -> 0 # 他のコストの和で全て表せる # 0 -> u1 -> d1 -> 0 # (1,7,1),(2,10,0) # 0 -> d1 -> u1 -> 0 # (7,1,1),(10,2,0) # u1 -> d1 -> u1 # 他のコストの和で全て表せる # よって、以下のコストの組み合わせで (l, j, o) を表せるか、という問題に帰着 # A: (4,2,0), (2,4,0) # B: (0,2,1), (2,0,1), (1,1,1) # C: (7,1,1), (1,7,1) # D: (10,2,0), (2,10,0) # 不変量として (l+j-2o)//6 = k とする。 k, o を消費して作れる l, j の範囲を考える(対称性から l だけ考える) # A: k = 1, o = 0, l += [2, 4] # B: k = 0, o = 1, l += [0, 1, 2] # C: k = 1, o = 1, l += [1, 7] # D: k = 2, o = 0, l += [2, 10] # l の最大値を考えると、k, o を消費して作れる l の最大値は 5k + 2o であることがわかる( o >= 1 ) # l の最小値を考えると、k, o を消費して作れる l の最小値は k であることがわかる( o >= 1 ) # k, o が同じである全ての (l,j) を作れるのか? # (l_max, j_min) から (-1, +1) ずつずらすことができればよい # グループA,Dを使うことで l を 2 ずつ減らすことができる # o >= 1 のとき: # 必ずグループB,Cを使っているため、 l を 1 ずつ減らすことができる # o = 0 のとき: # l, j の偶奇を変更できない for _ in range(int(input())): l, j, o = map(int, input().split()) if (l + j - 2 * o) % 6 != 0: print("No") continue k = (l + j - 2 * o) // 6 if k < 0: print("No") continue if k <= l <= 5 * k + 2 * o and k <= j <= 5 * k + 2 * o: if o == 0: if l % 2 + j % 2 != 0: print("No") continue print("Yes") else: print("No")