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