题目详解:
扩展欧几里得算法的应用。
ax+by=gcd(a,b)。
用朴素的语言讲就是两个数a,b。
对于整数x,y:ax+by可以组成 a,b最大公约数的任意倍数。
打个比方 2和7。
2x+7y可以组成任意整数。
1=2(-3)+7
2=2+0
3=2
(-2)+7
……
3和15
则只能组成3的倍数。

所以对于两个数,答案就是 if(d%gcd(a,b))。
对于三个数,可以理解成 d对于 gcd(a,b)和c。
所以答案就是 if(d%gcd(a,b,c))。
but这只有60pt(血一样的教训)。
注意一下,如果a,b,c为0的情况,
要特判。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll gcd(ll x,ll y)
{
    x=abs(x);
    y=abs(y);
    if(x<y) swap(x,y);
    ll m=y;
    while(m!=0)
    {
        m=x%y;
        x=y;
        y=m;
    }
    return x;
}
ll x,y,z,d,an;

int main()
{
    int t,f=0;
    cin>>t;
    while(t--)
    {
        cin>>x>>y>>z>>d;
        if(d==0) {
        cout<<"YES"<<endl;
         continue;
    }
    an=gcd(x,gcd(y,z));
    d=abs(d);
        if(an==0)  cout<<"NO"<<endl;
    else if(d%an==0) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    }
}