#include #include #include #include #include #include #include #include using namespace std; using ll = long long; using pii = pair;using pll = pair;using pci = pair; using vi = vector;using vl = vector;using vs = vector;using vb = vector;using vc = vector; using vpii = vector;using vpll = vector;using vpci = vector; using vvi = vector>;using vvl = vector>;using vvb = vector; using mpii = map;using mpll = map; using mpib = map;using mpil = map; using mpci = map;using mpsi = map; using mpivi = map>;using mpivl = map>; using mplvl = map; using mpisi = map>;using mpisl = map>; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define YesNo(flag) if(flag){printf("Yes\n");}else{printf("No\n");} #define OUT(x) {cout << x << '\n';} #define OUT_(x) {cout << x << ' ';} #define all(x) (x).begin(),(x).end() inline void scan(){} template inline void scan(Head&head,Tail&... tail){std::cin>>head;scan(tail...);} #define INT(...) int __VA_ARGS__;scan(__VA_ARGS__) #define LL(...) long long __VA_ARGS__;scan(__VA_ARGS__) #define STR(...) string __VA_ARGS__;scan(__VA_ARGS__) #define CHR(...) char __VA_ARGS__;scan(__VA_ARGS__) template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } template inline T ifloor(T x, T y){return x/y-(x%y ? (x < 0)^(y < 0) : 0);} template inline T iceil(T x, T y){return x/y+(x%y ? (x >= 0)^(y < 0) : 0);} int iinf = 1000000000; ll linf = 1000000000000000000LL; mt19937 mt; int main(){ LL(n,s,b); vl H(n);rep(i,n)scan(H[i]); vl dp(s + 1,-1); dp[s] = H[0]; for(int i = 1;i < n;i++){ int h = H[i]; vl ndp(s + 1,-1); for(int j = 0;j <= s;j++){ if(dp[j] == -1) continue; ll nowh = dp[j]; if(nowh >= h){ chmax(ndp[j],nowh); }else if(iceil(h - nowh,b) <= j){ chmax(ndp[j - iceil(h - nowh,b)],nowh + b * iceil(h - nowh,b)); } } swap(dp,ndp); bool flg = 0; rep(i,s + 1)flg |= dp[i] != -1; if(flg)chmax(dp[s],H[i]); } bool flg = 0; rep(i,s + 1)flg |= dp[i] != -1; YesNo(flg); }