#include<bits/stdc++.h>
#define int __int128
#define ll __int128
using namespace std;
const int N = 100005, p = 10007;
long long n, m;
ll xnx[2][N], x[2][N], nx[2][N];
ll ans;
long long num[N], c[N];
ll cnt[2][N];
signed main()
{
cin >> n >> m;
for(int i = 1; i <= n; i ++)
{
cin >> num[i];
num[i] %= p;
}
for(int i = 1; i <= n; i ++)
{
cin >> c[i];
}
int t;
for(int i = 1; i <= n; i ++)
{
t = ans;
if(i % 2 == 0)//偶数位上
{
if(i > 2 && xnx[0][c[i]])
{
ans = ((((ans + xnx[0][c[i]]) % p + x[0][c[i]] * num[i] % p) % p) % p + (nx[0][c[i]] % p * i % p) % p + i % p * num[i] % p * cnt[0][c[i]] % p) % p;
}
xnx[0][c[i]] = (xnx[0][c[i]] + i % p * num[i] % p) % p;
x[0][c[i]] = (x[0][c[i]] + i) % p;
nx[0][c[i]] = (nx[0][c[i]] + num[i]) % p;
cnt[0][c[i]] ++;cnt[0][c[i]] %= p;
}
else
{
if(i > 2 && xnx[1][c[i]])
{
ans = ((((ans + xnx[1][c[i]]) % p + x[1][c[i]] * num[i] % p) % p) % p+ (nx[1][c[i]] % p * i % p) % p + i % p * num[i] % p * cnt[1][c[i]] % p) % p;
}
xnx[1][c[i]] = (xnx[1][c[i]] + i % p * num[i] % p) % p;
x[1][c[i]] = (x[1][c[i]] + i) % p;
nx[1][c[i]] = (nx[1][c[i]] + num[i]) % p;
cnt[1][c[i]] ++;cnt[1][c[i]] %= p;
}
// cout << ans - t << endl;
}
long long res = ans % p;
cout << res;
return 0;
}