#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const long long MAXN=2000005,MOD=1e9+7;
long long x[7],y[7];
long long jc[MAXN],Inv[MAXN];
struct node
{
	long long x,y,c;
	node(){}
	node(long long xx,long long yy,long long cc)
	{
		x=xx,y=yy,c=cc;
	}
}a[4],b[4];
long long C(long long x1,long long y1,long long x2,long long y2)
{
	long long X=x2-x1;
	long long Y=y2-y1;
	return ((jc[X+Y]*Inv[X])%MOD*Inv[Y])%MOD;
}
long long ksm(long long x,long long y)
{
	long long k=1;
	while(y)
	{
		if(y&1)
			k=(k*x)%MOD;
		x=(x*x)%MOD;
		y>>=1;
	}
	return k;
}
void Init()
{
	jc[0]=1;
	for(long long i=1;i<MAXN;i++)
		jc[i]=(jc[i-1]*i)%MOD;
	Inv[MAXN-1]=ksm(jc[MAXN-1],MOD-2);
	for(long long i=MAXN-2;i>=0;i--)
		Inv[i]=(Inv[i+1]*(i+1))%MOD;
}
long long solve(node A,node B)
{
	long long x1=A.x,y1=A.y;
	long long x2=B.x,y2=B.y;
	long long re=0;
	for(long long i=x[3];i<=x[4];i++)
	{
		re+=((C(x1,y1,i,y[3]-1)*C(i,y[3],x2,y2))%MOD*(-i-y[3]))%MOD;
		re%=MOD;
	}
	for(long long i=y[3];i<=y[4];i++)
	{
		re+=((C(x1,y1,x[3]-1,i)*C(x[3],i,x2,y2))%MOD*(-i-x[3]))%MOD;
		re%=MOD;
	}
	for(long long i=x[3];i<=x[4];i++)
	{
		re+=((C(x1,y1,i,y[4])*C(i,y[4]+1,x2,y2))%MOD*(i+y[4]+1))%MOD;
		re%=MOD;
	}
	for(long long i=y[3];i<=y[4];i++)
	{
		re+=((C(x1,y1,x[4],i)*C(x[4]+1,i,x2,y2))%MOD*(i+x[4]+1))%MOD;
		re%=MOD;
	}
	return re;
}
int main()
{
	Init();
	for(long long i=1;i<=6;i++)
		scanf("%lld",&x[i]);
	for(long long i=1;i<=6;i++)
		scanf("%lld",&y[i]);
	a[0]=node(x[2]	,y[2]	,1);
	a[1]=node(x[2]	,y[1]-1	,-1);
	a[2]=node(x[1]-1,y[2]	,-1);
	a[3]=node(x[1]-1,y[1]-1	,1);
	b[0]=node(x[6]+1,y[6]+1	,1);
	b[1]=node(x[6]+1,y[5]	,-1);
	b[2]=node(x[5]	,y[6]+1	,-1);
	b[3]=node(x[5]	,y[5]	,1);
	long long ans=0;
	for(long long i=0;i<4;i++)
	{
		for(long long j=0;j<4;j++)
		{
			ans+=a[i].c*b[j].c*solve(a[i],b[j]);
			ans%=MOD;
		}
	}
	printf("%lld\n",(ans+MOD)%MOD);
}