import java.util.Scanner;
/**不考虑k局前的比分,只考虑剩余的局数和队伍之间的差值能否摊平
*/
/**输入里面数字过大,超过int类型,发生溢出
*/
// public class Main {
// public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
// int t = in.nextInt();//t次比较
// int n,k,d1,d2;
// for(int i = 1;i<=t;i++){
// n = in.nextInt();
// k = in.nextInt();
// d1 = in.nextInt();
// d2 = in.nextInt();
// if(n%3!=0){
// System.out.println("no");
// }
// if(((n-k)-d1-d2)<=0 & (d1!=0|d2!=0)){
// System.out.println("no");
// continue;
// }
// if(((n-k)-d1-d2)%3==0|(n-k)-2d1-d2)%3|(n-k)-d1-2d2)%3){
// System.out.println("yes");
// }
// else{
// if((d1+d2+(n-k))%3==0){
// System.out.println("yes");
// continue;
// }
// System.out.println("no");
// }
// }
// }
// }
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();//t次比较
BigInteger n,k,d1,d2,subNum,dNum;
BigInteger zero = BigInteger.valueOf(0);
BigInteger three = BigInteger.valueOf(3);
boolean f1,f2,f3;
for(int i = 1;i<=t;i++){
n = in.nextBigInteger();
k = in.nextBigInteger();
d1 = in.nextBigInteger();
d2 = in.nextBigInteger();
// 取余remainder 加法add 减法subtract 除法divide
subNum = n.subtract(k);//n-k
// dNum = d1.add(d1).add(d2);//d1+d2
dNum = d1.add(d2);
// subNum.subtract(dNum) //n-k-d1-d2
if(n.mod(three).compareTo(zero) != 0){
System.out.println("no");
continue;
}
// if(((n-k)-d1-d2)<=0 & (d1!=0|d2!=0)){
if((subNum.subtract(dNum).compareTo(zero)<= 0)
&(d1.compareTo(zero)!=0 | d2.compareTo(zero)!=0) )
{
System.out.println("no");
continue;
}
// if(((n-k)-d1-d2)%3==0|(n-k)-2d1-d2)%3==0|(n-k)-d1-2d2)%3==0)
if(subNum.subtract(dNum).mod(three).compareTo(zero) == 0|
subNum.subtract(dNum.add(d1)).mod(three).compareTo(zero) == 0|
subNum.subtract(dNum.add(d2)).mod(three).compareTo(zero) == 0
){
System.out.println("yes");
}
else{
// if((d1+d2+(n-k))%3==0){
if((subNum.add(dNum)).mod(three).compareTo(zero) == 0){
System.out.println("yes");
continue;
}
System.out.println("no");
}
}
}
}