#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-10;
const long long INFLL = (long long)(1e9) * (long long)(1e9);
const int INF = 1e9 + 7;
template <class T>
void chmin(T& a, const T b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T b) {
  if (a < b) a = b;
}
const long long powLL(const long long p, const long long q) {
  long long t = 1;
  for (int i = 0; i < q; i++) t *= p;
  return t;
}
template <typename T>
struct has_iter {
 private:
  template <typename U>
  static constexpr true_type check(typename U::iterator*);
  template <typename U>
  static constexpr false_type check(...);

 public:
  static constexpr bool value = decltype(check<T>(nullptr))::value;
};
template <typename T, typename U = typename T::iterator>
void print(const T& container) {
  auto &&first = begin(container), last = end(container);
  auto&& back = prev(last);
  for (auto e = first; e != last; e = next(e)) cout << *e << " \n"[e == back];
}
extern void* enabler;
template <typename Head,
          typename enable_if<!has_iter<Head>::value>::type*& = enabler>
void print(const Head& head) {
  cout << head << "\n";
}
template <>
void print<string>(const string& container) {
  cout << container << "\n";
}
template <typename Head, typename... Tail>
void print(const Head& head, const Tail&... tail) {
  cout << head << " ";
  print(tail...);
}
void io_speedup() {
  cin.tie(0);
  cout.tie(0);
  ios::sync_with_stdio(false);
}
template <typename T>
istream& operator>>(istream& is, vector<T>& vec) {
  for (T& x : vec) is >> x;
  return is;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << '(' << p.first << ", " << p.second << ')';
  return os;
}
template <typename T>
vector<T> read(int n) {
  vector<T> t(n);
  cin >> t;
  return t;
}
template <typename T>
T read() {
  T t;
  cin >> t;
  return t;
}
template <typename Head, typename... Tail>
struct vector_demensions {
  using type = vector<typename vector_demensions<Tail...>::type>;
};
template <typename Head>
struct vector_demensions<Head> {
  using type = Head;
};
template <typename T>
vector<T> make_vectors(int size, T val) {
  return vector<T>(size, val);
}
template <typename T = int, typename... Args>
auto make_vectors(int size, Args... tail) ->
    typename vector_demensions<Args..., T>::type {
  auto val = make_vectors<T>(forward<Args>(tail)...);
  return vector<decltype(val)>(size, val);
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int main() {
  int q;
  cin >> q;
  for (int tt = (0); tt < (int)(q); ++tt) {
    long long a, b, c, d;
    cin >> a >> b >> c >> d;
    bool flag = 1;
    if (b <= c) flag = 1;
    if (b > d) flag = 0;
    if (b > a) flag = 0;
    auto f = [&]() {
      long long p = a / b;
      p = a - p * b;
      if (p > c) {
        flag = 0;
        return;
      }
      long long q = d - b;
      q = q - q / b * b;
      if (q == 0) return;
      long long r = gcd(q, c);
      long long s = (c - p) / r;
      s *= r;
      s = s + p + r;
      if (c < s && s < b) flag = 0;
    };
    f();
    if (flag)
      print("Yes");
    else
      print("No");
  }
}
