from __future__ import print_function import sys sys.setrecursionlimit(500000) import re import array import copy import functools import operator import math import string import fractions from fractions import Fraction import collections import itertools import bisect import random import time import heapq from heapq import heappush from heapq import heappop from heapq import heappushpop from heapq import heapify from heapq import heapreplace from queue import PriorityQueue as pq from queue import Queue from itertools import accumulate from collections import deque from collections import Counter from operator import mul from functools import reduce input = sys.stdin.readline def eprint(*args, **kwargs): print(*args, file=sys.stderr, **kwargs) return # from fractions import gcd # from math import gcd # def lcm(n, m): # return int(n * m / gcd(n, m)) # def coprimize(p, q): # common = gcd(p, q) # return (p // common, q // common) # def find_gcd(list_l): # x = reduce(gcd, list_l) # return x def combinations_count(n, r): r = min(r, n - r) numer = reduce(mul, range(n, n - r, -1), 1) denom = reduce(mul, range(1, r + 1), 1) return numer // denom def main(): l,r,m,k = map(int,input().strip().split()) if l==r and l*k%m == 0: print("Yes") return elif l==r and l*k%m != 0: print("No") return eprint('l*k, r*k ',end=':\n') eprint(l*k, r*k) l1 = l*k // m r1 = (r-1)*k // m if l*k%m ==0 or r*k%m == 0: print("yes") return if r1 - l1>0: print("Yes") else: print("No") return # eprint('l, l+m,r ',end=':\n') # eprint(l, l+m,r) # if l1+m<=r1 or l1+m-l<=r1: # print("Yes") # else: # print("No") # l2=l1%m # r2=r1%m # if l2: # pass # if 0