#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 2e18;
template<typename T>
bool minimize(T& a, const T& b) {
if (b < a) {a = b; return true;}
return false;
}
const int MX = 1e5 + 5;
ll h;
int a, b, c;
struct Node {
int r; ll d;
bool operator<(const Node& other) const {
return d > other.d;
}
};
// Với những tầng u đến được, ta xét giá trị u % a
// Khi đó nếu có 2 tầng u1, u2 sao cho u1 = u2 (mod a) và u1 < u2, từ u1 ta có thể đến u2 bằng cách spam nút a
// => Với mỗi r từ 0 đến a - 1, ta cần biết tầng u nhỏ nhất có thể đến được sao cho u % a = r
// Từ đỉnh r ta có thể đến được đỉnh (r + b) % a, (r + c) % a với trọng số của cạnh tương ứng là b và c
// (Lưu ý (r + a) % a = r nên ta không cần xét đỉnh này)
// => Bài toán tìm đường đi ngắn nhất với đỉnh xuất phát là s = 1 % a
ll dist[MX]; // dist[r] = tầng u nhỏ nhất đến được sao cho u % a = r và chỉ dùng các nút bấm b và c
// hay đường đi ngắn ngắn từ s đến r
void dijkstra(int s) {
for (int r = 0; r < a; r++) dist[r] = LINF;
priority_queue<Node> pq;
dist[s] = 1;
pq.push({s, dist[s]});
while (!pq.empty()) {
Node front = pq.top(); pq.pop();
int r = front.r; ll d = front.d;
if (d > dist[r]) continue;
for (int w : {b, c}) {
int nxt_r = (r + w) % a;
if (minimize(dist[nxt_r], dist[r] + w)) {
pq.push({nxt_r, dist[nxt_r]});
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> h;
cin >> a >> b >> c;
dijkstra(1 % a);
ll ans = 0;
for (int r = 0; r < a; r++) {
ll u = dist[r];
if (u > h) continue;
ll cnt = (h - u) / a + 1;
ans += cnt;
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMmUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHthID0gYjsgcmV0dXJuIHRydWU7fQoJcmV0dXJuIGZhbHNlOyAKfQoKY29uc3QgaW50IE1YID0gMWU1ICsgNTsgIAoKbGwgaDsgCmludCBhLCBiLCBjOyAgCgpzdHJ1Y3QgTm9kZSB7CglpbnQgcjsgbGwgZDsgCglib29sIG9wZXJhdG9yPChjb25zdCBOb2RlJiBvdGhlcikgY29uc3QgewoJCXJldHVybiBkID4gb3RoZXIuZDsgCgl9Cn07CgovLyBW4bubaSBuaOG7r25nIHThuqduZyB1IMSR4bq/biDEkcaw4bujYywgdGEgeMOpdCBnacOhIHRy4buLIHUgJSBhCi8vIEtoaSDEkcOzIG7hur91IGPDsyAyIHThuqduZyB1MSwgdTIgc2FvIGNobyB1MSA9IHUyIChtb2QgYSkgdsOgIHUxIDwgdTIsIHThu6sgdTEgdGEgY8OzIHRo4buDIMSR4bq/biB1MiBi4bqxbmcgY8OhY2ggc3BhbSBuw7p0IGEKLy8gPT4gVuG7m2kgbeG7l2kgciB04burIDAgxJHhur9uIGEgLSAxLCB0YSBj4bqnbiBiaeG6v3QgdOG6p25nIHUgbmjhu48gbmjhuqV0IGPDsyB0aOG7gyDEkeG6v24gxJHGsOG7o2Mgc2FvIGNobyB1ICUgYSA9IHIKCi8vIFThu6sgxJHhu4luaCByIHRhIGPDsyB0aOG7gyDEkeG6v24gxJHGsOG7o2MgxJHhu4luaCAociArIGIpICUgYSwgKHIgKyBjKSAlIGEgduG7m2kgdHLhu41uZyBz4buRIGPhu6dhIGPhuqFuaCB0xrDGoW5nIOG7qW5nIGzDoCBiIHbDoCBjIAovLyAoTMawdSDDvSAociArIGEpICUgYSA9IHIgbsOqbiB0YSBraMO0bmcgY+G6p24geMOpdCDEkeG7iW5oIG7DoHkpCi8vID0+IELDoGkgdG/DoW4gdMOsbSDEkcaw4budbmcgxJFpIG5n4bqvbiBuaOG6pXQgduG7m2kgxJHhu4luaCB4deG6pXQgcGjDoXQgbMOgIHMgPSAxICUgYQoKbGwgZGlzdFtNWF07IC8vIGRpc3Rbcl0gPSB04bqnbmcgdSBuaOG7jyBuaOG6pXQgxJHhur9uIMSRxrDhu6NjIHNhbyBjaG8gdSAlIGEgPSByIHbDoCBjaOG7iSBkw7luZyBjw6FjIG7DunQgYuG6pW0gYiB2w6AgYwoJCQkgLy8gICAgICAgICAgIGhheSDEkcaw4budbmcgxJFpIG5n4bqvbiBuZ+G6r24gdOG7qyBzIMSR4bq/biByCgp2b2lkIGRpamtzdHJhKGludCBzKSB7Cglmb3IgKGludCByID0gMDsgciA8IGE7IHIrKykgZGlzdFtyXSA9IExJTkY7IAoKCXByaW9yaXR5X3F1ZXVlPE5vZGU+IHBxOwoJZGlzdFtzXSA9IDE7ICAgCglwcS5wdXNoKHtzLCBkaXN0W3NdfSk7ICAKCgl3aGlsZSAoIXBxLmVtcHR5KCkpIHsKCQlOb2RlIGZyb250ID0gcHEudG9wKCk7IHBxLnBvcCgpOyAgCgkJaW50IHIgPSBmcm9udC5yOyBsbCBkID0gZnJvbnQuZDsgCgoJCWlmIChkID4gZGlzdFtyXSkgY29udGludWU7ICAKCgkJZm9yIChpbnQgdyA6IHtiLCBjfSkgewoJCQlpbnQgbnh0X3IgPSAociArIHcpICUgYTsgICAKCQkJaWYgKG1pbmltaXplKGRpc3Rbbnh0X3JdLCBkaXN0W3JdICsgdykpIHsKCQkJCXBxLnB1c2goe254dF9yLCBkaXN0W254dF9yXX0pOyAgCgkJCX0KCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBoOyAKCWNpbiA+PiBhID4+IGIgPj4gYzsKCglkaWprc3RyYSgxICUgYSk7ICAKCglsbCBhbnMgPSAwOyAgIAoJZm9yIChpbnQgciA9IDA7IHIgPCBhOyByKyspIHsKCQlsbCB1ID0gZGlzdFtyXTsgCgkJaWYgKHUgPiBoKSBjb250aW51ZTsgIAoJCWxsIGNudCA9IChoIC0gdSkgLyBhICsgMTsgIAoJCWFucyArPSBjbnQ7ICAKCX0KCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==