T = int(input())
queries = []
for i in range(T):
  queries.append(list(map(int, input().split())))

for query in queries:
  stock, sunuke_num, threshold, add_num = query

  # そもそもダメなパターン
  if sunuke_num > add_num or stock < sunuke_num:
    print("No")
    continue

  # # 仕入直前まで在庫を減らす
  # stock %= sunuke_num

  # # これでもまだ閾値より高ければ、次のターンで確実に在庫不足に陥る
  # if stock > threshold:
  #   print("No")
  #   continue

  # # 仕入れ直前の購入後の値
  # preval = stock

  # # 在庫補充
  # stock += add_num

  # # 仕入後の購入後の値
  # postval = stock - sunuke_num

  # # 次ターン時点で在庫不足のパターン
  # if postval < 0:
  #   print("No")
  #   continue

  # # 仕入数と買ってく数が等しいパターン
  # if postval - preval == 0:
  #   print("Yes")
  #   continue

  # print("pre: {} post : {}".format(preval, postval))
  # tmp = postval - preval + threshold
  # if tmp >= sunuke_num:
  #   print("Yes")
  # else:
  #   print("No")

  is_zero = False
  for i in range(50):
    # 仕入直前まで在庫を減らす
    stock %= sunuke_num

    # これでもまだ閾値より高ければ、次のターンで確実に在庫不足に陥る
    if stock > threshold:
      break

    # 仕入れ直前の購入後の値
    preval = stock

    # 仕入後の購入後の値
    postval = stock + add_num - sunuke_num

    # 次ターン時点で在庫不足のパターン
    if postval < 0:
      break

    # 仕入数と買ってく数が等しいパターン
    if postval - preval == 0:
      is_zero = True
      break

    tmp = postval - preval + threshold
    if tmp >= sunuke_num:
      if stock == 0:
        is_zero = True
        break
      else:
        stock += add_num
    else:
      break

  if is_zero is True:
    print("Yes")
  else:
    print("No")
