#!/usr/bin/env python3
import math
t = int(input())
# t <= 300,a,b,c,d <= 10**18
# a-k*b <= c になったら+d をする。ことを繰り返し、尽きるケースがあるかを答える
# ダメになるケースは d<b ならば絶対に続かない　補給しても減るから
# また、何回か補給したタイミングで、s > c and s < k になるケースがあれば終了する
# sがどんな値をとるかは、循環しない中でどの値をとるかを記録しておけばわかる。
# 補給される直前の値をリストで保持してそれに含まれるかを確かめればOK
# この方針だと長さb のリストを保持する必要があって、O(b*t)でTLE
# 数学的に考えられるはず。
# c+d,c-b+d+1 の中でb以下になるケースに陥ったら負け
# 解説をみると、コーナーケースを覗くと、mod で捉えることができる。
# mod B で見た時に、modB >C になるケースが存在すればダメ
# A+k*D modB がC を超えるタイミングがあればそこで-B がきて、補充が来る前に負の数になる

for i in range(t):
    a,b,c,d = map(int,input().split())
    under = -1 + math.ceil(a/b)
    if a < b: print("No")
    elif d < b: print("No")
    elif c >= b:print("Yes")
    else:
        for j in range(b):
            if (a+j*d) % b > c:
                print("No")
                break
            if j == b-1:print("Yes")
