#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 2400005
#define M 2400000
#define ll long long
#define mod 1000000007
int x1, x2, x3, x4, x5, x6;
int y1, y2, y3, y4, y5, y6;
int fac[N], inv[N];
int C(int n, int m)
{
	if (n < m)return 0;
	return (ll)fac[n] * inv[m] % mod * inv[n - m] % mod;
}
int Add(int a, int b)
{
	int c = a + b;
	if (c >= mod)c -= mod;
	return c;
}
int Sub(int a, int b)
{
	int c = a - b;
	if (c < 0)c += mod;
	return c;
}
int Pow(int a, int k)
{
	int ret = 1;
	while (k)
	{
		if (k & 1)
			ret = (ll)ret * a % mod;
		a = (ll)a * a % mod;
		k >>= 1;
	}
	return ret;
}
int Way(int x1, int y1, int x2, int y2)
{
	x1--, y1--, x2--, y2--;
	int ans = C(x2 + y2 + 2, x2 + 1);
	ans = Sub(ans, C(x2 + y1 + 1, x2 + 1));
	ans = Sub(ans, C(x1 + y2 + 1, x1));
	ans = Add(ans, C(x1 + y1, x1));
	return ans;
}
int main()
{
	fac[0] = 1;
	for (int i = 1; i <= M; i++)
		fac[i] = (ll)fac[i - 1] * i % mod;
	inv[M] = Pow(fac[M], mod - 2);
	for (int i = M; i >= 1; i--)
		inv[i - 1] = (ll)inv[i] * i % mod;
	scanf("%d%d%d%d%d%d", &x1, &x2, &x3, &x4, &x5, &x6);
	scanf("%d%d%d%d%d%d", &y1, &y2, &y3, &y4, &y5, &y6);
	int ans = 0, s;
	for (int i = y3 + 1; i <= y4; i++)//左侧进入点
	{
		s = (ll)Way(x3 - x2, i - y2 + 1, x3 - x1, i - y1 + 1) * Way(x5 - x3 + 1, y5 - i + 1, x6 - x3 + 1, y6 - i + 1) % mod;
		ans = (ans - (ll)(i + x3) * s) % mod;
	}
	s = (ll)Way(x3 - x2 + 1, y3 - y2 + 1, x3 - x1 + 1, y3 - y1 + 1) * Way(x5 - x3 + 1, y5 - y3 + 1, x6 - x3 + 1, y6 - y3 + 1) % mod;
	ans = (ans - (ll)(x3 + y3) * s) % mod;//左下进入点
	for (int i = x3 + 1; i <= x4; i++)//下侧进入点
	{
		s = (ll)Way(i - x2 + 1, y3 - y2, i - x1 + 1, y3 - y1) * Way(x5 - i + 1, y5 - y3 + 1, x6 - i + 1, y6 - y3 + 1) % mod;
		ans = (ans - (ll)(i + y3) * s) % mod;
	}
	for (int i = y3; i <= y4 - 1; i++)//右侧离开点
	{
		s = (ll)Way(x4 - x2 + 1, i - y2 + 1, x4 - x1 + 1, i - y1 + 1) * Way(x5 - x4, y5 - i + 1, x6 - x4, y6 - i + 1) % mod;
		ans = (ans + (ll)(i + x4 + 1) * s) % mod;
	}
	s = (ll)Way(x4 - x2 + 1, y4 - y2 + 1, x4 - x1 + 1, y4 - y1 + 1) * Way(x5 - x4 + 1, y5 - y4 + 1, x6 - x4 + 1, y6 - y4 + 1) % mod;
	ans = (ans + (ll)(x4 + y4 + 1) * s) % mod;
	for (int i = x3; i <= x4 - 1; i++)//上侧离开点
	{
		s = (ll)Way(i - x2 + 1, y4 - y2 + 1, i - x1 + 1, y4 - y1 + 1) * Way(x5 - i + 1, y5 - y4, x6 - i + 1, y6 - y4) % mod;
		ans = (ans + (ll)(i + y4 + 1) * s) % mod;
	}
	if (ans < 0)ans += mod;
	printf("%d\n", ans);
}
