#ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif using namespace std; using i64 = int64_t; using vi = vector; using vvi = vector; constexpr i64 MOD = 1000000000; int main() { vi vs(4); for (int i = 0; i < 4; i++) { cin >> vs[i]; } int ans = 1e9; for (int a = 1; a <= 30; a++) { for (int b = 1; b <= 30; b++) { for (int c = 1; c <= 30; c++) { int cnt = 0; const int INF = 1e9; vi kek(31, INF); kek[0] = 0; for (int i = 0; i < 31; i++) { if (kek[i] != INF && i + a < 31) { kek[i + a] = min(kek[i + a], kek[i] + 1); } } for (int i = 0; i < 31; i++) { if (kek[i] != INF && i + b < 31) { kek[i + b] = min(kek[i + b], kek[i] + 1); } } for (int i = 0; i < 31; i++) { if (kek[i] != INF && i + c < 31) { kek[i + c] = min(kek[i + c], kek[i] + 1); } } for (int i = 0; i < 4; i++) { if (kek[vs[i]] == INF) { cnt = 1e9; break; } else { cnt += kek[vs[i]]; } } ans = min(ans, cnt); } } } cout << ans << endl; }