import
java.util.*;
class
GFG
{
static
int
lower_bound(
int
[]a,
int
val) {
int
lo =
0
, hi = a.length -
1
;
while
(lo < hi) {
int
mid = (
int
)Math.floor(lo + (
double
)(hi - lo) /
2
);
if
(a[mid] < val)
lo = mid +
1
;
else
hi = mid;
}
return
lo;
}
static
int
maxNumbers(
int
[]stack1,
int
N,
int
[]stack2,
int
M,
int
K) {
int
[]sumA =
new
int
[N +
1
];
for
(
int
i =
0
; i < N +
1
; i++) {
sumA[i] =
0
;
}
int
[]sumB =
new
int
[M +
1
];
for
(
int
i =
0
; i < M +
1
; i++) {
sumB[i] =
0
;
}
for
(
int
i =
0
; i < N; i++)
sumA[i +
1
] = sumA[i] + stack1[i];
for
(
int
i =
0
; i < M; i++)
sumB[i +
1
] = sumB[i] + stack2[i];
int
MaxNumbers =
0
;
for
(
int
i =
0
; i <= N; i++) {
int
remValueOfK = K - sumA[i];
if
(remValueOfK <
0
)
continue
;
int
lowerBound
= lower_bound(sumB,
remValueOfK);
if
(lowerBound > M
|| sumB[lowerBound] > remValueOfK) {
lowerBound--;
}
int
books = i + lowerBound;
MaxNumbers = Math.max(MaxNumbers, books);
}
return
MaxNumbers;
}
public
static
void
main(String args[])
{
int
[]stack1 = {
60
,
90
,
120
};
int
[]stack2 = {
100
,
10
,
10
,
200
};
int
K =
130
;
int
N =
3
;
int
M =
4
;
int
ans = maxNumbers(stack1, N, stack2, M, K);
System.out.println(ans);
}
}