#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int maxn=1e5+10;
int n,m,a[maxn],b[maxn],ans,f[maxn][2];
int quick_pow(int x,int n)
{
int ans=1;
while( n )
{
if( n&1 ) ans=ans*x%mod;
x=x*x%mod;
n>>=1;
}
return ans;
}
signed main()
{
cin >> n >> m;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++) cin >> b[i];
f[0][0]=1;//相等的种数
int all=0;
for(int i=1;i<=n;i++)
{
if( a[i]==0 ) all++;
if( b[i]==0 ) all++;
if( a[i]&&b[i] )
{
if( a[i]==b[i] )
f[i][1]=f[i-1][1],f[i][0]=f[i-1][0];
else if( a[i]>b[i] )
f[i][1]=( f[i-1][0]+f[i-1][1] )%mod;
else//a[i]<b[i]
f[i][1]=f[i-1][1];//那么获胜的概率只能从前面继承
}
else if( a[i]==0&&b[i]==0 )
{
f[i][1]=f[i-1][1]*m%mod*m%mod+f[i-1][0]*(m*(m-1)/2%mod)%mod;
f[i][0]=f[i-1][0]*m%mod;
}
else if( a[i]==0 )
{
f[i][1]=f[i-1][1]*m%mod+f[i-1][0]*(m-b[i])%mod; //胜利
f[i][0]=f[i-1][0];
}
else if( b[i]==0 )
{
f[i][0]=f[i-1][0];
f[i][1]=f[i-1][1]*m%mod+f[i-1][0]*(a[i]-1)%mod;
}
f[i][0]%=mod,f[i][1]%=mod;
}
cout << f[n][1]*quick_pow( quick_pow(m,all),mod-2 )%mod;
}