#include<iostream>
#include<cstdio>
#define mod 1000000007
using namespace std;
long long dp[410][410];
long long mi[410][410];//i^j前缀和
int a[410],b[410];
int main()
{
	int n,c;scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)scanf("%d",&b[i]);
	for(int i=1;i<=400;i++)
	{
		mi[i][0]=1;
		for(int j=1;j<=c;j++)mi[i][j]=mi[i][j-1]*i%mod;
	}
	for(int i=1;i<=400;i++)for(int j=0;j<=c;j++)mi[i][j]=mi[i][j]+mi[i-1][j];
	dp[0][0]=1;
	for(int i=1;i<=n;i++)
	for(int j=0;j<=c;j++)
	for(int k=0;k<=j;k++)
	dp[i][j]=(dp[i][j]+dp[i-1][j-k]*((mi[b[i]][k]-mi[a[i]-1][k])%mod+mod)%mod)%mod;
	printf("%lld\n",dp[n][c]);return 0;
}
//dp[i][j]表示前i个人分j个苹果的方案的累加和
//dp[i][j]=dp[i-1][j-k]*(a[i]^k+...+b[i]^k)