#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
using f80 = long double;
using vi32 = vector<int>;
using vi64 = vector<i64>;
using vf80 = vector<f80>;
using vstr = vector<string>;
inline void yes() { cout << "Yes" << endl; }
inline void no() { cout << "No" << endl; }
inline i64 gcd(i64 a, i64 b) {
  if (min(a, b) == 0) return max(a, b);
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
inline i64 lcm(i64 a, i64 b) {
  if (min(a, b) == 0) return max(a, b);
  return a / gcd(a, b) * b;
}
template <typename T>
class pqasc : public priority_queue<T, vector<T>, greater<T>> {};
template <typename T>
class pqdesc : public priority_queue<T, vector<T>, less<T>> {};
template <typename T>
inline void amax(T &x, T y) {
  x = max(x, y);
}
template <typename T>
inline void amin(T &x, T y) {
  x = min(x, y);
}
template <typename T>
inline T exp(T x, i64 n, T e = 1) {
  T r = e;
  while (n > 0) {
    if (n & 1) r *= x;
    x *= x;
    n >>= 1;
  }
  return r;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (auto &x : v) is >> x;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &v) {
  for (int i = 0; i < int(v.size()); i++) {
    if (i) os << ' ';
    os << v[i];
  }
  return os;
}
void solve();
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(16);
  solve();
  return 0;
}
void solve() {
  int t;
  cin >> t;
  while (t--) {
    i64 a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a < b) {
      no();
      continue;
    }
    if (b > d) {
      no();
      continue;
    }
    if (b <= c + 1) {
      yes();
      continue;
    }
    if (b == d) {
      if (a - b * (a / b) < c) {
        yes();
      } else {
        no();
      }
      continue;
    }
    if (a % b > c) {
      no();
      continue;
    }
    i64 t = gcd(d - b, b);
    i64 s = a - t * (a / t);
    i64 x = s + t * (c + t - s) / t;
    if (x < b) {
      no();
      continue;
    }
    yes();
  }
}
