反悔贪心即可。
llt A[100005],P[100005];uint Op[100005];
int main()
{
uint n,m;scanf("%u%u",&n,&m);
for(uint i=0;i<n;i++)scanf("%lld",A+i),_max(A[i],0ll);
for(uint i=0;i<n;i++)scanf("%lld",P+i);
for(uint i=0;i<n;i++)scanf("%u",Op+i);
llt ans=0;
for(uint op=0;op<=1;op++)
{
std::vector<llt>QAQ;
llt now=0;
for(uint i=0;i<n;i++)
if(Op[i]==op)now+=A[i],QAQ.push_back(-P[i]-A[i]);
else QAQ.push_back(A[i]-P[i]);
std::sort(QAQ.begin(),QAQ.end(),std::greater<llt>());
for(uint i=0;i<m&&i<n;i++)
if(QAQ[i]>0)
now+=QAQ[i];
_max(ans,now);
}
printf("%lld\n",ans);
return 0;
}