#include <fstream>
#include <iostream>
using namespace std;
#define MOD 10007
/*
sub[0][][]:编号为偶数
sub[1][][]:编号为奇数
subSum[][][0]:颜色相同的下标之和 x1+x2+x3+...
subSum[][][1]:颜色相同的数字之和 y1+y2+y3+...
subSum[][][2]:是记录颜色相同的总个数 n
subSum[][][3]:下标与颜色乘积 x1*y1
https://blog.csdn.net/Binary_Heap/article/details/78248494
*/
int main()
{
int n, m, sum=0;
int color[100010], number[100010];
int subSum[2][100010][4];
//ifstream cin("sum.in");
//ofstream cout("sum.out");
cin >> n >> m;
for(int i = 1; i <= n; i ++) {
cin >> number[i];
number[i] %= MOD;
}
for(int i = 1; i <= n; i ++) {
cin >> color[i];
color[i] %= MOD;
}
for(int i = 1; i <= n; i ++)
{
subSum[i % 2][color[i]][0] = (subSum[i % 2][color[i]][0] + i) % MOD;
subSum[i % 2][color[i]][1] = (subSum[i % 2][color[i]][1] + number[i]) % MOD;
subSum[i % 2][color[i]][2] = (subSum[i % 2][color[i]][2] + 1) % MOD;
subSum[i % 2][color[i]][3] = (subSum[i % 2][color[i]][3] + i * number[i]) % MOD;
}
/*(x1+x2+x3+..+xn)*(y1+y2+y3+..yn)+(n-2)*(x1*y1+..xn*yn)*/
for(int i = 1; i <= m; i ++)
sum = (sum + (subSum[0][i][0] * subSum[0][i][1]) % MOD + ((subSum[0][i][2] - 2)*subSum[0][i][3]) % MOD + (subSum[1][i][0] * subSum[1][i][1]) % MOD + ((subSum[1][i][2] - 2)*subSum[1][i][3]) % MOD) % MOD;
cout << sum << endl;
//cin.close();
//cout.close();
return 0;
}
/**************************************************************
Problem: 2342
User: admin
Language: C++
Result: Accepted
Time:309 ms
Memory:5856 kb
****************************************************************/