#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<vector>
#include<deque>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<functional>
#include<utility>
#include<bitset>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cstdio>

using namespace std;

#define REP(i,n) for(int i=0;i<int(n);i++)
#define foreach(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)
typedef long long ll;
typedef pair<ll,ll> P;

int main(void){
	int i,j;

	cin.tie(0);
	ios_base::sync_with_stdio(false);

	int N,M,K;
	cin >> N >> M >> K;
	vector<ll>a(N),b(N);
	for(i=0;i<N;i++) cin >> a[i];
	for(i=0;i<N;i++) cin >> b[i];

	vector<P>c(N);
	for(i=0;i<N;i++) c.push_back(P(a[i],b[i]));
	sort(c.begin(),c.end());
	reverse(c.begin(),c.end());

	ll ans=0;
	for(i=0;i<(1<<N);i++){
		ll x=0;
		int m=M,k=K;
		if(__builtin_popcount(i)==K){
			for(j=0;j<N;j++){
				if(i&(1<<j)){
					if(m>=c[j].second){
						x+=(c[j].first)*(c[j].second);
					    m-=c[j].second;
						k--;
						if(k==0) break;
					}else{
						x+=(c[j].first)*m;
						m=0;
						break;
					}
			    }
		    }

			ans=max(ans,x+m);
		}
	}

	cout << ans << endl;

	return 0;
}