/** * author: enot.1.10, Vladimir Smykalov (enot.1.10@gmail.com) * created: 19.09.2015 22:23:47 **/ #include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <set> #include <map> #include <ctime> #include <cassert> #include <queue> #define fs first #define sc second #define F first #define S second #define pb push_back #define mp make_pair #define forn(i, n) for(int i = 0 ; (i) < (n) ; ++i) #define forit(it,v) for(typeof((v).begin()) it = v.begin() ; it != (v).end() ; ++it) #define eprintf(...) fprintf(stderr, __VA_ARGS__),fflush(stderr) #define sz(a) ((int)(a).size()) #define all(a) (a).begin(),a.end() #define pw(x) (1LL<<(x)) using namespace std; typedef long long ll; typedef double dbl; typedef vector<int> vi; typedef pair<int, int> pi; const int inf = (int)1.01e9; const dbl eps = 1e-9; /* --- main part --- */ #define TASK "1" const int maxn = (int)4e3 + 10; const ll INF = (ll)1e18; ll d[maxn]; int main() { #ifdef home assert(freopen(TASK".in", "r", stdin)); assert(freopen(TASK".out", "w", stdout)); #endif int tn; scanf("%d", &tn); forn(tt, tn) { ll n; int a, b, c; scanf("%lld%d%d%d", &n, &a, &b, &c); d[0] = 1; for (int i = 1; i < maxn; ++i) { d[i] = d[i - 1]; ll s = 0; if (i >= a) s += d[i - a]; if (i >= b) s += d[i - b]; if (i >= c) s += d[i - c]; d[i] = max(d[i], s); d[i] = min(d[i], INF); } forn(i, maxn) if (d[i] >= n) { printf("%d\n", i); break; } } #ifdef home eprintf("Time: %d ms\n", (int)(clock() * 1000. / CLOCKS_PER_SEC)); #endif return 0; }