#include <bits/stdc++.h>
using namespace std;
#define MAXN 101
#define MAXM 40001
int n, t, sum, maxn, ind, ans = 0x3f3f3f3f;
int v[MAXN], c[MAXN];
int vt[MAXM], wt[MAXM];
int f1[MAXM], f2[MAXM];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> t;
for (int i=1; i<=n; i++) cin >> v[i];
for (int i=1; i<=n; i++){
cin >> c[i];
sum += v[i] * c[i];
maxn = max(maxn, v[i] * v[i]);
for (int j=1; j<=c[i]; j <<= 1){
wt[++ind] = j * v[i];
vt[ind] = j;
c[i] -= j;
}
if (c[i]){
wt[++ind] = c[i] * v[i];
vt[ind] = c[i];
}
}
if (sum < t){
cout << -1;
return 0;
}
memset(f1, 0x3f, sizeof(f1));
memset(f2, 0x3f, sizeof(f2));
f1[0] = f2[0] = 1;
for (int i=1; i<=ind; i++){
for (int j=t+maxn; j>=v[i]; j--) f1[j] = max(f1[j], f1[j-wt[i]]+vt[i]);
}
for (int i=1; i<=ind; i++){
for (int j=v[i]; j<=maxn; j++) f2[j] = max(f2[j], f2[j-v[i]]+1);
}
for (int i=t; i<=t+maxn; i++) ans = min(ans, f1[i]+f2[i-t]);
if (ans == 0x3f3f3f3f) cout << -1;
else cout << ans;
return 0;
}