#include<bits/stdc++.h>
using namespace std;
template<typename T>inline T read(){
	T f=0,x=0;char c=getchar();
	while(!isdigit(c)) f=c=='-',c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return f?-x:x;
}
namespace run{
	const int N=2e6+9,mod=1e9+7;
	inline int add(int x,int y){return x+y>=mod?x-mod+y:x+y;}
	inline int sub(int x,int y){return x>=y?x-y:x+mod-y;}
	inline int qpow(int x,int y){
		int ret=1;
		while(y){
			if(y&1) ret=1LL*ret*x%mod;
			x=1LL*x*x%mod,y>>=1;
		}
		return ret;
	}
	int fac[N],ifac[N];
	inline int C(int n,int m){
		if(n<0 || m<0 || n<m) return 0;
		return 1LL*fac[n]*ifac[m]%mod*ifac[n-m]%mod;
	}
	int x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6;
	inline int get(int _x,int _y,int x,int y){return C(abs(x-_x)+abs(y-_y),abs(x-_x));}
	inline int calc1(int x,int y){
		int ret1=add(get(x1-1,y1-1,x,y),get(x2,y2,x,y));
		ret1=sub(ret1,add(get(x1-1,y2,x,y),get(x2,y1-1,x,y)));
		return ret1;
	}
	inline int calc2(int x,int y){
		int ret2=add(get(x,y,x6+1,y6+1),get(x,y,x5,y5));
		ret2=sub(ret2,add(get(x,y,x5,y6+1),get(x,y,x6+1,y5)));
		return ret2;
	}
	int main(){
		x1=read<int>(),x2=read<int>(),x3=read<int>(),x4=read<int>(),x5=read<int>(),x6=read<int>();
		y1=read<int>(),y2=read<int>(),y3=read<int>(),y4=read<int>(),y5=read<int>(),y6=read<int>();
		fac[0]=ifac[0]=1;
		for(int i=1;i<=x6+y6+4;i++) fac[i]=1LL*fac[i-1]*i%mod;
		ifac[x6+y6+4]=qpow(fac[x6+y6+4],mod-2);
		for(int i=x6+y6+3;i>=1;i--) ifac[i]=1LL*ifac[i+1]*(i+1)%mod;

		int ans=0;
		for(int i=y3;i<=y4;i++) ans=(1LL*calc1(x3-1,i)*calc2(x3,i)%mod*(mod-x3-i)+ans)%mod;
		for(int i=x3;i<=x4;i++) ans=(1LL*calc1(i,y3-1)*calc2(i,y3)%mod*(mod-y3-i)+ans)%mod;
		for(int i=y3;i<=y4;i++) ans=(1LL*calc1(x4,i)*calc2(x4+1,i)%mod*(x4+i+1)+ans)%mod;
		for(int i=x3;i<=x4;i++) ans=(1LL*calc1(i,y4)*calc2(i,y4+1)%mod*(y4+i+1)+ans)%mod;
		printf("%d\n",ans);
		return 0;
	}
}
int main(){
#ifdef my
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	return run::main();
}