反悔贪心即可。

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;
}