#include using namespace std; using ll = long long; #ifdef LOCAL #include #define debug(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__) #else #define debug(...) (static_cast(0)) #endif template T ceil(T x, U y) { return (x > 0 ? (x + y - 1) / y : x / y); } template T floor(T x, U y) { return (x > 0 ? x / y : (x - y + 1) / y); } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); ll N, S, B; cin >> N >> S >> B; vector H(N); for (int i = 0; i < N; i++) cin >> H[i]; // {id, stamina, height} queue> que; que.emplace(0, S, H[0]); vector seen(N); // 着地したか while (!que.empty()) { auto [id, s, h] = que.front(); if (id == N - 1) { cout << "Yes" << '\n'; return 0; } que.pop(); // そのまま上昇して, 次の足場に移動 if (h + s * B >= H[id + 1]) { ll diff = max(0, H[id + 1] - h); que.emplace(id + 1, s - ceil(diff, B), h + ceil(diff, B) * B); } // 一度地面につく if (seen[id]) continue; seen[id] = true; que.emplace(id, S, H[id]); } cout << "No" << '\n'; }