#include <bits/stdc++.h>
using namespace std ;
#define int long long
const int M = 105 , X = 1e3 + 5;
int dp[M][X] ;
// dp[i][j] tells maximum possible weight we can get from color i to m
// if we already have j weight with us, provided max ans satisfies weight < x
int solve(vector<int>* v, int m , int x, int i = 1 , int j = 0){
if(j > x) return INT_MIN ; // too much weight taken
if(i > m) return 0 ; //successfully reached end
if(v[i].size() == 0) return INT_MIN ; // no weight of this color present
if(dp[i][j] != -1) return dp[i][j] ;
int c = INT_MIN ;
for(auto k : v[i]){ // k iterates over all weights of current color v[i]
int val = solve(v,m,x,i+1,j+k) ;
if(val >= 0) c = max(c,k+val) ;
}
return dp[i][j] = c ;
}
int32_t main(){
int n , m , x ;
cin >> n >> m >> x ;
vector<int> v[m+1] ; // all colors 1 to m
pair<int,int> a[n] ;
for(int i = 0 ; i < n ; i++){
cin >> a[i].first ; //weight
}
for(int i = 0 ; i < n ; i++) {
cin >> a[i].second ; // color
}
for(int i = 0 ; i <= m ; i++){
for(int j = 0 ; j <= x ; j++) dp[i][j] = -1 ;
}
for(int i = 0 ; i < n ; i++){
v[a[i].second].push_back(a[i].first) ;
}
//paired by color
int ans = solve(v,m,x) ;
if(ans < 0) cout << -1 ;
else cout << x-ans ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQgOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCgpjb25zdCBpbnQgTSA9IDEwNSAsIFggPSAxZTMgKyA1OwoKaW50IGRwW01dW1hdIDsgCgovLyBkcFtpXVtqXSB0ZWxscyBtYXhpbXVtIHBvc3NpYmxlIHdlaWdodCB3ZSBjYW4gZ2V0IGZyb20gY29sb3IgaSB0byBtIAovLyBpZiB3ZSBhbHJlYWR5IGhhdmUgaiB3ZWlnaHQgd2l0aCB1cywgcHJvdmlkZWQgbWF4IGFucyBzYXRpc2ZpZXMgd2VpZ2h0IDwgeCAKCmludCBzb2x2ZSh2ZWN0b3I8aW50PiogdiwgaW50IG0gLCBpbnQgeCwgaW50IGkgPSAxICwgaW50IGogPSAwKXsKCWlmKGogPiB4KSByZXR1cm4gSU5UX01JTiA7IC8vIHRvbyBtdWNoIHdlaWdodCB0YWtlbgoJaWYoaSA+IG0pIHJldHVybiAwIDsgLy9zdWNjZXNzZnVsbHkgcmVhY2hlZCBlbmQKCWlmKHZbaV0uc2l6ZSgpID09IDApIHJldHVybiBJTlRfTUlOIDsgLy8gbm8gd2VpZ2h0IG9mIHRoaXMgY29sb3IgcHJlc2VudAoJaWYoZHBbaV1bal0gIT0gLTEpIHJldHVybiBkcFtpXVtqXSA7CglpbnQgYyA9IElOVF9NSU4gOwoJZm9yKGF1dG8gayA6IHZbaV0peyAvLyBrICBpdGVyYXRlcyBvdmVyIGFsbCB3ZWlnaHRzIG9mIGN1cnJlbnQgY29sb3IgdltpXQoJCWludCB2YWwgPSBzb2x2ZSh2LG0seCxpKzEsaitrKSA7CgkJaWYodmFsID49IDApIGMgPSBtYXgoYyxrK3ZhbCkgOwoJfQoJcmV0dXJuIGRwW2ldW2pdID0gYyA7Cn0KaW50MzJfdCBtYWluKCl7CglpbnQgbiAsIG0gLCB4IDsKCWNpbiA+PiBuID4+IG0gPj4geCA7Cgl2ZWN0b3I8aW50PiB2W20rMV0gOyAvLyBhbGwgY29sb3JzIDEgdG8gbQoJcGFpcjxpbnQsaW50PiBhW25dIDsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyl7CgkJY2luID4+IGFbaV0uZmlyc3QgOyAvL3dlaWdodAoJfQoJZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKSB7CgkJY2luID4+IGFbaV0uc2Vjb25kIDsgLy8gY29sb3IKCX0KCWZvcihpbnQgaSA9IDAgOyBpIDw9IG0gOyBpKyspewoJCWZvcihpbnQgaiA9IDAgOyBqIDw9IHggOyBqKyspIGRwW2ldW2pdID0gLTEgOwoJfQoJZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKXsgCgkJdlthW2ldLnNlY29uZF0ucHVzaF9iYWNrKGFbaV0uZmlyc3QpIDsKCX0KCS8vcGFpcmVkIGJ5IGNvbG9yCglpbnQgYW5zID0gc29sdmUodixtLHgpIDsKCWlmKGFucyA8IDApIGNvdXQgPDwgLTEgOwoJZWxzZSBjb3V0IDw8IHgtYW5zIDsKCXJldHVybiAwIDsKfQo=