智乃放球
题号:NC288388
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}有这样一个消除游戏,将 n 个小球依次放入 m 个桶中。每次放球,可以任选一个桶放置,每当某个桶中的小球数量达到 k 个时,该桶中的这 k 个小球将被一同消除。
\hspace{15pt}智乃想知道是否存在一种操作方式,使得最终所有桶中剩余的小球数目之和为 q

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^5\right) 代表数据组数,每组测试数据描述如下: 
\hspace{15pt}在一行上输入四个正整数 n,m,k,q\left(1\leq n,m,k\leq 10^9;\ 1\leq q \leq n\right) 代表小球的数量、桶的数量、消除的阈值、查询的小球数量。

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行。如果存在一种放置方式使得最终所有桶中剩余的小球数目之和为 q,输出 \rm Yes;否则输出 \rm No
示例1

输入

复制
2
100 1 2 1
100 1 3 1

输出

复制
No
Yes

说明

\hspace{15pt}对于第一组测试数据,由于仅有一个桶,所以有且仅有唯一一种放置方式,即:将所有小球放置于同一个桶中。最终,该桶中剩余的小球数目为 0
\hspace{15pt}对于第二组测试数据,同样地有且仅有唯一的放置方式,最终该桶中剩余的小球数目为 1
示例2

输入

复制
3
21 4 5 16
16 4 5 16
21 4 5 21

输出

复制
Yes
Yes
No