#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int N; vector V; vector W; int solve(int lim) { int dp[lim + 1]; memset(dp, -1, sizeof(dp)); dp[0] = 0; int ans = 0; for (int i = 0; i < N; ++i) { int v = V[i]; int w = W[i]; for (int j = lim - w; j >= 0; --j) { if (dp[j] == -1) continue; int nj = j + w; dp[nj] = max(dp[nj], dp[j] + v); ans = max(ans, dp[nj]); } } return ans; } int main() { cin >> N; V.resize(N); W.resize(N); for (int i = 0; i < N; ++i) { cin >> V[i] >> W[i]; } int V; cin >> V; int ng = 0; int ok = 200000; while (abs(ok - ng) >= 2) { int x = (ok + ng) / 2; int v = solve(x); if (v >= V) { ok = x; } else { ng = x; } } cout << ok << endl; ng = 0; ok = 200000; while (abs(ok - ng) >= 2) { int x = (ok + ng) / 2; int v = solve(x); if (v > V) { ok = x; } else { ng = x; } } if (ok <= 100000) { cout << ok - 1 << endl; } else { cout << "inf" << endl; } return 0; }