#include<bits/stdc++.h>
using namespace std;
struct node
{
long long id;
long long w;
long long cl;
};
node a[200000];
int main()
{
freopen("2015sum.in","r",stdin);
freopen("2015sum.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
vector<vector<node> >v1(m+1),v0(m+1);
for(int i=1;i<=n;i++)
{
a[i].id=i;
scanf("%lld",&a[i].w);
}
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i].cl);
if(i%2==0)
v0[a[i].cl].push_back(a[i]);
else
v1[a[i].cl].push_back(a[i]);
}
long long ans=0;
for(int i=1;i<v0.size();i++)
{
int len=v0[i].size();
if(len<=1)continue;
long long sumid=0,sumw=0;
long long sab=0;
for(int j=0;j<len;j++)
{
sumid=(sumid+v0[i][j].id)%10007;
sumw=(sumw+v0[i][j].w)%10007;
sab=(sab+v0[i][j].id*v0[i][j].w)%10007;
}
sab=sab*(len-2)%10007;
ans=(ans+(sumid*sumw)%10007+sab)%10007;
}
for(int i=1;i<v1.size();i++)
{
int len=v1[i].size();
if(len<=1)continue;
int sumid=0,sumw=0;
long long sab=0;
for(int j=0;j<len;j++)
{
sumid=(sumid+v1[i][j].id)%10007;
sumw=(sumw+v1[i][j].w)%10007;
sab=(sab+v1[i][j].id*v1[i][j].w)%10007;
}
sab=sab*(len-2)%10007;
ans=(ans+(sumid*sumw)%10007+sab)%10007;
}
printf("%lld\n",ans);
return 0;
}