#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000LL * 1000 * 1000 + 7;
const int INF = 1000 * 1000 * 1000;
const long long base = 1e18;
const int MAXN = 600000;
const double EPS = 1e-9;
const double PI = acos(-1.);
long long binPow(long long a, long long x) {
  long long res = 1;
  while (x) {
    if (x & 1) {
      res *= a;
      res %= MOD;
    }
    a *= a;
    a %= MOD;
    x /= 2;
  }
  return res;
}
long long dpT[200000][2];
long long n, m;
long long a[200000];
long long b[200000];
long long dp(int pos, int more) {
  if (pos == n) {
    return more;
  }
  if (dpT[pos][more] != -1) return dpT[pos][more];
  if (more == 1) {
    long long ans = dp(pos + 1, more);
    if (a[pos] == 0) {
      ans *= m;
      ans %= MOD;
    }
    if (b[pos] == 0) {
      ans *= m;
      ans %= MOD;
    }
    return dpT[pos][more] = ans;
  }
  if (a[pos] && b[pos] && a[pos] < b[pos]) return dpT[pos][more] = 0;
  if (a[pos] && b[pos] && a[pos] > b[pos])
    return dpT[pos][more] = dp(pos + 1, 1);
  if (a[pos] && b[pos] && a[pos] == b[pos]) {
    return dpT[pos][more] = dp(pos + 1, 0);
  }
  if (a[pos] == 0 && b[pos]) {
    long long res = 0;
    res += (dp(pos + 1, 1) * (m - b[pos])) % MOD;
    res %= MOD;
    res += dp(pos + 1, 0);
    res %= MOD;
    return dpT[pos][more] = res;
  }
  if (a[pos] && b[pos] == 0) {
    long long res = 0;
    res += (dp(pos + 1, 1) * (a[pos] - 1)) % MOD;
    res %= MOD;
    res += dp(pos + 1, 0);
    res %= MOD;
    return dpT[pos][more] = res;
  }
  long long res = 0;
  long long cur = (m * (m - 1) / 2) % MOD;
  res += (dp(pos + 1, 1) * (cur)) % MOD;
  res %= MOD;
  res += (dp(pos + 1, 0) * m) % MOD;
  res %= MOD;
  return dpT[pos][more] = res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  int cnt = 0;
  for (int i = (0); i < (n); ++i) {
    cin >> a[i];
    if (!a[i]) cnt++;
  }
  for (int i = (0); i < (n); ++i) {
    cin >> b[i];
    if (!b[i]) cnt++;
  }
  memset(dpT, -1, sizeof dpT);
  long long div = binPow(m, cnt);
  long long y = binPow(div, MOD - 2);
  cout << (dp(0, 0) * y) % MOD;
  return 0;
}
