#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

const int MOD = int(1e9) + 7;

long long gcd (long long a, long long b) {
  return b ? gcd(b, a % b) : a;
}

int main()
{
	int Test; scanf("%d", &Test); while (Test--){
    long long A, B, C, D; scanf("%lld%lld%lld%lld", &D, &A, &B, &C);
    bool ans = false;
    if(D < A || D % A > B) {
      ans = false;
    }else {
      // 처음 D, 매일 A 사먹음, <=B면 C개 사옴
      // 1. D
      // 2. D % A <= B 
      // 3. D % A + C >= A
      // 4. (D % A + C) % A <= B
      // 5. (D % A + C) % A + C >= A
      // 6. ((D % A + C) % A + C) % A <= B
      // 7. ((D % A + C) % A + C) % A + C >= A
      // 8. (((D % A + C) % A + C) % A + C) % A <= B

      // 짝수:
      //  (D + C + C + C) % A <= B
      //  (D + k * C) % A <= B여야 함.

      // 홀수:
      //  (D + k * C) % A + C >= A
      //  (D + k * C) % A >= A-C

      // A-C <= (D + k*C) % A <= B 가 항상 성립하는가??
      long long g = gcd(C, A);

      long long max_mod = (A-1 - D % A) / g * g + D % A;
      long long min_mod = min(D % A, (max_mod + C) % A);
      assert(min_mod <= max_mod);
      ans = (A-C <= min_mod && max_mod <= B);
    }


    puts(ans ? "YES" : "NO");
	}

	return 0;
}