#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int n; cin >> n; int v[n], w[n]; for (int i = 0; i < n; i++){ cin >> v[i] >> w[i]; } int V; cin >> V; int dp[n+1][1000*n+1]; for (int i = 0; i < n + 1; i++){ for (int j = 0; j < 1000 * n + 1; j++){ dp[i][j] = 0; } } for (int i = 0; i < n; i++){ for (int j = 0; j < 1000 * n + 1; j++){ dp[i+1][j] = max(dp[i+1][j], dp[i][j]); if(j + w[i] >= 1000 * n + 1) continue; dp[i+1][j+w[i]] = max(dp[i+1][j+w[i]], dp[i][j]+v[i]); } } int mx = 0, mn = 9999999; int sum = 0; for (int i = 0; i < n; i++){ sum += v[i]; } for (int i = 1; i < 1000 * n + 1; i++){ if(dp[n][i] == V){ mx = max(mx, i); mn = min(mn, i); } } printf("%d\n", mn); if(V == sum){ puts("inf"); } else { printf("%d\n", mx); } return 0; }