#include using namespace std; long long solve(long long N,long long a,long long b,long long c){ vector dp(N+1,-1); dp.at(N) = 0; for(int i=N; i>=0; i--) if(dp.at(i) != -1) for(int k=i-1; k>=0; k--){ long long d = i^k; if(d == a || d == b || d == c) continue; dp.at(k) = max(dp.at(k),dp.at(i)+1); } for(auto d : dp) cout << d << " "; cout << endl; return *max_element(dp.begin(),dp.end()); } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); long long N,a,b,c; cin >> N >> a >> b >> c; a++,b++,c++; vector V; if(__popcount((unsigned long long)a) == 1) V.push_back(a); if(__popcount((unsigned long long)b) == 1) V.push_back(b); if(__popcount((unsigned long long)c) == 1) V.push_back(c); sort(V.begin(),V.end()); if(V.size() == 0) cout << N << endl; else if(V.size() == 1){ long long answer = N-N/V.at(0); if(N%V.at(0) >= V.at(0)/2) answer--; cout << answer << endl; } else if(V.at(0) != 2){ long long answer = N-N/V.at(0)-N/V.at(1); if(N%V.at(0) >= V.at(0)/2) answer--; if(N%V.at(1) >= V.at(1)/2) answer--; cout << answer << endl; } else if(V.at(1) == 4) cout << N/4 << endl; else{ long long answer = N-N/V.at(0)-N/V.at(1); if(N%V.at(0) >= V.at(0)/2) answer--; if(N%V.at(1) >= V.at(1)/2) answer--; cout << answer << endl; } }