#include using namespace std; #define rep(i, l, r) for (int i = (int)(l); i<(int)(r); i++) #define ll long long const ll INF = 2e18; int A, B, O, W; vector> G; vector seen; int ans = 1; void dfs(int v, int cur) { seen[v] = true; ans = max(ans, cur); int cnt = 0; for (auto to : G[v]) { if (!seen[to]) { cnt++; dfs(to, cur + 1); } } } int main() { cin >> A >> B >> O >> W; G.resize(A+B+O+W); rep(i, 0, A) rep(j, 0, A) { G[i].push_back(j); } rep(i, 0, B) rep(j, 0, B) { G[A+i].push_back(A+j); } rep(i, 0, O) rep(j, 0, O) { G[A+B+i].push_back(A+B+j); } rep(i, 0, W) rep(j, 0, W) { G[A+B+O+i].push_back(A+B+O+j); } rep(i, 0, A) rep(j, A+B+O, A+B+O+W) { G[i].push_back(j); } rep(i, A, A+B) rep(j, A+B+O, A+B+O+W) { G[i].push_back(j); } rep(i, A+B+O, A+B+O+W) rep(j, 0, A+B+O) { G[i].push_back(j); } seen.assign(A+B+O+W, false); dfs(0, 1); seen.assign(A+B+O+W, false); dfs(A, 1); seen.assign(A+B+O+W, false); dfs(A+B, 1); seen.assign(A+B+O+W, false); dfs(A+B+O, 1); cout << ans << endl; }