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
****************************************************************/