https://vjudge.net/contest/280124#problem/H
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 150
#define M 20000
using namespace std;
int n,m,ans=0x3f3f3f3f;
int w[N],num[N];
int f1[M],cnt[M],f2[M];
int main()
{
int i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&w[i]);
for(i=1;i<=n;i++)scanf("%d",&num[i]);
memset(f1,0x3f,sizeof(f1));
memset(f2,0x3f,sizeof(f2));
f1[0]=f2[0]=0;
for(i=1;i<=n;i++)
{
memset(cnt,0,sizeof(cnt));
for(j=w[i];j<=15000;j++)
{
if(f1[j]>f1[j-w[i]]+1&&cnt[j-w[i]]<num[i])
{
f1[j]=f1[j-w[i]]+1;
cnt[j]=cnt[j-w[i]]+1;
}
f2[j]=min(f2[j],f2[j-w[i]]+1);
}
}
for(i=m;i<=15000;i++)
{
ans=min(ans,f1[i]+f2[i-m]);
}
if(ans>=15000)printf("-1\n");
else printf("%d\n",ans);
}