#include <iostream>
#include <cstdio>
#define int long long
#define N 1000002
#define T 2000000
using namespace std;
const int mod=1000000007;
struct node{
	int x,y,op;
}a[10],b[10];
int x[10],y[10],i,j,fac[2*N],inv[2*N],ans;
int poww(int a,int b)
{
	int ans=1,base=a;
	while(b){
		if(b&1) ans=ans*base%mod;
		base=base*base%mod;
		b>>=1;
	}
	return ans;
}
int C(int n,int m)
{
	return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int get(int x1,int y1,int x2,int y2)
{
	return C(x2-x1+y2-y1,x2-x1);
}
int cal(int x1,int y1,int x2,int y2)
{
	int x3=x[3],y3=y[3],x4=x[4],y4=y[4],ans=0;
	for(int i=x3;i<=x4;i++){
		ans=(ans+get(x1,y1,i,y4)*get(i,y4+1,x2,y2)%mod*(i+y4+1)%mod)%mod;
		ans=(ans-get(x1,y1,i,y3-1)*get(i,y3,x2,y2)%mod*(i+y3)%mod+mod)%mod;
	}
	for(int i=y3;i<=y4;i++){
		ans=(ans+get(x1,y1,x4,i)*get(x4+1,i,x2,y2)%mod*(i+x4+1)%mod)%mod;
		ans=(ans-get(x1,y1,x3-1,i)*get(x3,i,x2,y2)%mod*(i+x3)%mod+mod)%mod;
	}
	return ans;
}
signed main()
{
	for(i=1;i<=6;i++) scanf("%lld",&x[i]);
	for(i=1;i<=6;i++) scanf("%lld",&y[i]);
	for(i=fac[0]=1;i<=T;i++) fac[i]=fac[i-1]*i%mod;
	inv[T]=poww(fac[T],mod-2);
	for(i=T-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
	a[1]=(node){x[6]+1,y[6]+1,1};
	a[2]=(node){x[5],y[6]+1,-1};
	a[3]=(node){x[6]+1,y[5],-1};
	a[4]=(node){x[5],y[5],1};
	b[1]=(node){x[1]-1,y[1]-1,1};
	b[2]=(node){x[2],y[1]-1,-1};
	b[3]=(node){x[1]-1,y[2],-1};
	b[4]=(node){x[2],y[2],1};
	for(i=1;i<=4;i++){
		for(j=1;j<=4;j++){
			int res=cal(b[i].x,b[i].y,a[j].x,a[j].y);
			if(b[i].op!=a[j].op) ans=(ans-res+mod)%mod;
			else ans=(ans+res)%mod;
		}
	}
	printf("%lld\n",ans);
	return 0;
}