#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
const int INFINITE = 0x3f3f3f3f;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T lowbit(T n) {
  return (n ^ (n - 1)) & n;
}
template <class T>
inline int countbit(T n) {
  return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}
typedef vector<int> VI;
typedef vector<VI> VII;
typedef vector<string> VS;
long long n, k, d1, d2;
bool c1() {
  long long x3 = (long long)(k - d1 - 2 * d2) / 3;
  long long x2 = x3 + d2, x1 = x3 + d1 + d2;
  if (x1 < 0 || x2 < 0 || x3 < 0) return false;
  if (x1 + x2 + x3 != k) return false;
  long long rem = n - k;
  rem -= 2 * d1 + d2;
  return ((rem >= 0) && (rem % 3 == 0));
}
bool c2() {
  long long x2 = (long long)(k - d1 - d2) / 3;
  long long x1 = x2 + d1, x3 = x2 + d2;
  if (x1 < 0 || x2 < 0 || x3 < 0) return false;
  if (x1 + x2 + x3 != k) return false;
  if (d1 < d2) d1 ^= d2 ^= d1 ^= d2;
  long long rem = n - k;
  rem -= 2 * d1 - d2;
  return ((rem >= 0) && (rem % 3 == 0));
}
bool c3() {
  long long x1 = (long long)(k - 2 * d1 + d2) / 3;
  long long x2 = x1 + d1, x3 = x1 + d1 - d2;
  if (x1 < 0 || x2 < 0 || x3 < 0) return false;
  if (x1 + x2 + x3 != k) return false;
  long long rem = n - k;
  rem -= d1 + d2;
  return ((rem >= 0) && (rem % 3 == 0));
}
bool c4() {
  long long x1 = (long long)(k - 2 * d1 - d2) / 3;
  long long x2 = x1 + d1, x3 = x1 + d1 + d2;
  if (x1 < 0 || x2 < 0 || x3 < 0) return false;
  if (x1 + x2 + x3 != k) return false;
  long long rem = n - k;
  rem -= d1 + 2 * d2;
  return ((rem >= 0) && (rem % 3 == 0));
}
void solve() {
  cin >> n >> k >> d1 >> d2;
  if (c1() || c2() || c3() || c4())
    cout << "yes\n";
  else
    cout << "no\n";
}
int main() {
  ios::sync_with_stdio(false);
  int t;
  cin >> t;
  while (t--) solve();
  return 0;
}
