#include <iostream>
#include <algorithm>
using namespace std;
int N, M;
int szerep[100005];
int eljatszak[100005]; //hanyan jatszak az adot szerepet
int kime[100005]; //ki melyiket kapja
struct adat
{
int ind;
int aksz;
int sir;
};
bool Rend(adat a, adat b)
{
return ((a.sir>b.sir) || ((a.sir==b.sir) && (szerep[a.aksz]<szerep[b.aksz])));
}
adat t[100005];
int KoviSzerep() //megadja a kovetkezo szerepeket
{
for(int i = 1; i <= M; i++)
{
if(eljatszak[i]==0)
return i;
}
//már mindenen szerepet játszanak -> kell pár még az embereknek
for(int i = 1; i <= M; i++)
{
if(eljatszak[i]<szerep[i]) //még van hely rá
return i;
}
}
int main()
{
cin >> N >> M;
for(int i = 1; i <= M; i++)
{
cin >> szerep[i];
}
for(int i = 1; i <= N; i++)
{
t[i].ind=i;
cin >> t[i].aksz;
}
for(int i = 1; i <= N; i++)
{
cin >> t[i].sir;
}
//Rendezünk
sort(t+1, t+N+1, Rend);
int ans=0;
//Mohó vagyok
//Mindekinek a kedvére teszek
for(int i = 1; i <= N; i++)
{
if(eljatszak[t[i].aksz] < szerep[t[i].aksz])
{
kime[t[i].ind] = t[i].aksz;
eljatszak[t[i].aksz]++;
}
else
ans+=t[i].sir;
}
//most vannak, akik sírnak, töltöm az üres szerepeket
int almafa=0;
for(int i = 1; i <= N; i++)
{
if(kime[i]==0)//adunk neki szerepet
{
almafa = KoviSzerep();
kime[i] = almafa;
eljatszak[kime[i]]++;
}
}
//van e szerep, amit nem jatszik el senki sem
for(int j = 1; j <= M; j++)
{
if(eljatszak[j]==0) //senki eddig
{
for(int i = N; i >= 1; i--)
{
if(eljatszak[szerep[t[i].ind]]>1)//van rajta kivul mas
{
ans+=t[i].sir;
kime[t[i].ind] = j;
eljatszak[szerep[t[i].ind]]--;
eljatszak[j]++;
break;
}
}
}
}
cout << ans << "\n";
for(int i = 1; i <= N; i++)
{
cout << kime[i] << " ";
}
cout << "\n";
return 0;
}