#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
template<typename T> inline void chkmin(T &a, const T &b) { a = a < b ? a : b; }
template<typename T> inline void chkmax(T &a, const T &b) { a = a > b ? a : b; }

const int MAXN = 2000005, MOD = 1e9 + 7;
int fac[MAXN], inv[MAXN], X[6], Y[6];
struct Point { int x, y, c; } p1[4], p2[4];
LL modpow(LL a, int b) {
	LL res = 1;
	for (; b; b >>= 1) {
		if (b & 1) res = res * a % MOD;
		a = a * a % MOD;
	}
	return res;
}

void init() {
	int n = 2e6;
	for (int i = fac[0] = 1; i <= n; i++)
		fac[i] = (LL)fac[i - 1] * i % MOD;
	inv[n] = modpow(fac[n], MOD - 2);
	for (int i = n; i > 0; i--)
		inv[i - 1] = (LL)inv[i] * i % MOD;
}

LL go(int x1, int y1, int x2, int y2) {
	x2 -= x1, y2 -= y1;
	return (LL)fac[x2 + y2] * inv[x2] % MOD * inv[y2] % MOD;
}

LL calc(int x1, int y1, int x2, int y2) {
	LL ans = 0;
	for (int i = X[2]; i <= X[3]; i++) {
		ans -= go(x1, y1, i, Y[2] - 1) * go(i, Y[2], x2, y2) % MOD * (i + Y[2] - 1);
		ans += go(x1, y1, i, Y[3]) * go(i, Y[3] + 1, x2, y2) % MOD * (i + Y[3]);
		ans %= MOD;
	}
	for (int i = Y[2]; i <= Y[3]; i++) {
		ans -= go(x1, y1, X[2] - 1, i) * go(X[2], i, x2, y2) % MOD * (i + X[2] - 1);
		ans += go(x1, y1, X[3], i) * go(X[3] + 1, i, x2, y2) % MOD * (i + X[3]);
		ans %= MOD;
	}
	if (ans < 0) ans += MOD;
	return ans;
}

int main() {
	init();
	for (int i = 0; i < 6; i++) scanf("%d", X + i);
	for (int i = 0; i < 6; i++) scanf("%d", Y + i);
	p1[0] = Point { X[0] - 1, Y[0] - 1, 1 };
	p1[1] = Point { X[1], Y[0] - 1, -1 };
	p1[2] = Point { X[0] - 1, Y[1], -1 };
	p1[3] = Point { X[1], Y[1], 1 };
	
	p2[0] = Point { X[5] + 1, Y[5] + 1, 1 };
	p2[1] = Point { X[4], Y[5] + 1, -1 };
	p2[2] = Point { X[5] + 1, Y[4], -1 };
	p2[3] = Point { X[4], Y[4], 1 };
	
	LL ans = 0;
	for (int i = 0; i < 4; i++)
	for (int j = 0; j < 4; j++)
		ans += p1[i].c * p2[j].c * calc(p1[i].x, p1[i].y, p2[j].x, p2[j].y);
	printf("%lld\n", (ans % MOD + MOD) % MOD);
	return 0;
}