![image]()
#include <iostream>
using namespace std;
#define MAXN 1000000
int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid;
bool check(int nn)
{
int count = 0, i, j;
i = n-nn+1; //选取带钱最多的的NN个学生,这里是一个贪心的策略
j = 1;
while (i <= n)
{
if( M[i]<=C[j] ②)
count += C[j] - M[i];
i++;
j++;
}
return count<=A ③;
}
void sort(int a[], int l, int r)
{
int i = l, j = r, x = a[(l + r) / 2], y;
while (i <= j)
{
while (a[i] < x) i++;
while (a[j] > x) j--;
if (i <= j)
{
y = a[i]; a[i] = a[j]; a[j] = y;
i++; j--;
}
}
if (i < r) sort(a, i, r);
if (l < j) sort(a, l, j);
}
int main() {
int i;
cin >> n >> B >> A;
for (i = 1; i <= n; i++)
cin >> M[i]; //每个学生自己带的钱
for (i = 1; i <= B; i++)
cin >> C[i]; //租车的钱
sort(M, 1, n);
sort(C, 1, B);
l = 0;
r = n;
while (l <= r)
{
mid = (l + r) / 2;
if(check(mid))
{
ans = mid;
l = mid + 1;
}
else
r = mid-1⑤;
}
cout << ans << endl;
return 0;
}