import algorithm, macros, math, sequtils, strutils, tables # import bitops, lenientops, deques, # heapqueue, sets, sugar let read* = iterator: string = while true: (for s in stdin.readLine.split: yield s) template input*(T: static[typedesc]): untyped = when T is int: read().parseInt elif T is float: read().parseFloat elif T is string: read() elif T is char: read()[0] macro dump*(args: varargs[typed]): untyped = result = newNimNode(nnkStmtList) for x in args: let s = toStrLit(x) result.add quote do: stderr.write `s`, " = ", `x`, " " result.add quote do: stderr.write "\n" proc `|=`*(n: var int, m: int) = n = n or m proc `|=`*(n: var bool, m: bool) = n = n or m proc `&=`*(n: var int, m: int) = n = n and m proc `&=`*(n: var bool, m: bool) = n = n and m proc `^=`*(n: var int, m: int) = n = n xor m proc `^=`*(n: var bool, m: bool) = n = n xor m proc `%=`*(n: var int, m: int) = n = n mod m proc `/=`*(n: var int, m: int) = n = n div m proc `<<=`*(n: var int, m: int) = n = n shl m proc `>>=`*(n: var int, m: int) = n = n shr m proc `?=`*(n: var SomeNumber, m: SomeNumber) = n = max(n, m) proc newSeq2*[T](n1, n2: Natural): seq[seq[T]] = newSeqWith(n1, newSeq[T](n2)) proc newSeq3*[T](n1, n2, n3: Natural): seq[seq[seq[T]]] = newSeqWith(n1, newSeqWith(n2, newSeq[T](n3))) proc newSeq4*[T](n1, n2, n3, n4: Natural): seq[seq[seq[seq[T]]]] = newSeqWith(n1, newSeqWith(n2, newSeqWith(n3, newSeq[T](n4)))) # -------------------------------------------------- # let L, R, M, K = input(int) var min, max: int if R - L + 1 >= M: min = 0 max = M - 1 else: let modL = L mod M let modR = R mod M if modL < modR: min = modL max = modR else: min = 0 max = M - 1 let sumMin = min * K let sumMax = max * K if sumMax - sumMin + 1 >= M: echo "Yes" elif (sumMax mod M) < (sumMin mod M): echo "Yes" elif sumMin mod M == 0: echo "Yes" else: echo "No"