var n,m,i,j,cl,sum:longint;
a,b,ab:array[1..100000] of longint;
s,sa,sb,sab:array[0..200005] of longint;
bo:array[0..200005] of boolean;
begin
//assign(input,'sum.in');
//assign(output,'sum.out');
//reset(input);
//rewrite(output);
readln(n,m);
for i:=1 to n do
read(a[i]);
for i:=1 to n do
a[i]:=a[i] mod 10007;
for i:=1 to n do
b[i]:=i mod 10007;
for i:=1 to n do
ab[i]:=(a[i]*b[i])mod 10007;
fillchar(bo,sizeof(bo),false);
for i:=1 to n do
begin
read(cl);
if (i and 1)=0 then inc(cl,m);
if bo[cl] then
begin
inc(s[cl]);
sa[cl]:=(a[i]+sa[cl]) mod 10007;
sb[cl]:=(b[i]+sb[cl]) mod 10007;
sab[cl]:=(ab[i]+sab[cl]) mod 10007;
end
else begin
bo[cl]:=true;
s[cl]:=1;
sa[cl]:=a[i];
sb[cl]:=b[i];
sab[cl]:=ab[i];
end;
end;
sum:=0;
for i:=1 to m shl 1 do
if (bo[i])and(s[i]>1) then
sum:=(sum+(s[i]-2)*sab[i]+sa[i]*sb[i]) mod 10007;
write(sum);
//close(input);
//close(output);
end.
/**************************************************************
Problem: 2342
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/