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