from random import randrange as rd def make(N,X,M,A): n=rd(1,N+1) x=rd(1,X+1) m=rd(M+1) a=[rd(1,A+1) for i in range(n)] return n,x,m,a def sol1(n,x,m,A): a=A[:] need=[0]*(n+1) for i in range(n): while a[i]>=x: need[i]+=1 a[i]//=2 for i in range(n-1,-1,-1): need[i]=max(need[i],need[i+1]) if sum(need)<=m:return "Yes" return "No" def sol2(n,x,m,A): a=[0]+A[:] dp=[[10**10]*33 for i in range(n+3)] dp[0][32]=0 for i in range(1,n+1): sdp=[10**10]*35 for j in range(32,-1,-1): sdp[j]=min(sdp[j+1],dp[i-1][j]) for j in range(33): if x<=a[i]//(2**j):continue dp[i][j]=sdp[j]+j res=10**10 for j in range(33): res=min(res,dp[n][j]) if res<=m:return "Yes" return "No" n,x,m=map(int,input().split()) a=list(map(int,input().split())) print(sol2(n,x,m,a)) cnt=0 while 0: cnt+=1 print(cnt) n,x,m,a=make(15,30,30,60) ans1=sol1(n,x,m,a) ans2=sol2(n,x,m,a) if ans1!=ans2: print("!") exit() print(ans1)