#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define ALL(c) (c).begin(),(c).end()
#define dump(x) cout << #x << " = " << (x) << endl
constexpr ll TEN(int n) { return (n == 0) ? 1 : 10 * TEN(n-1); }

template<class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
	os<<"("<<p.first<<","<<p.second<<")";
	return os;
}

template<class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
	os<<"{";
	rep(i, v.size()) {
		if (i) os<<",";
		os<<v[i];
	}
	os<<"}";
	return os;
}

const ll MOD = TEN(9) + 7;
const int MX = TEN(6) * 2 + 10;

ll inv[MX], fact[MX], ifact[MX];

void init() {
    inv[1] = 1;
    for (int i = 2; i < MX; ++i) {
        inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
    }
    fact[0] = ifact[0] = 1;
    for (int i = 1; i < MX; ++i) {
        fact[i] = fact[i-1] * i % MOD;
        ifact[i] = ifact[i-1] * inv[i] % MOD;
    }
}

ll comb(int n, int r) {
    if (n < 0 || r < 0 || r > n) return 0;
    return fact[n] * ifact[r] % MOD * ifact[n - r] % MOD;
}

inline ll way(int p, int q) {
	return comb(p + q, p);
}

int main() {
	init();

	vector<int> X(6), Y(6);
	rep(i, 6) cin >> X[i];
	rep(i, 6) cin >> Y[i];

	ll ans = 0;

	vector<pair<pii, int>> vl = {mp(mp(X[0]-1,Y[0]-1),1),mp(mp(X[0]-1,Y[1]),-1),mp(mp(X[1],Y[0]-1),-1),mp(mp(X[1],Y[1]),1)};
	vector<pair<pii, int>> vr = {mp(mp(X[4],Y[4]),1),mp(mp(X[5]+1,Y[4]),-1),mp(mp(X[4],Y[5]+1),-1),mp(mp(X[5]+1,Y[5]+1),1)};
	vector<pair<pair<pii, pii>, int>> edges;

	for (int i = X[2]; i <= X[3]; ++i) {
		edges.eb(mp(mp(i, Y[2]-1), mp(i, Y[2])), -i - Y[2]);
		edges.eb(mp(mp(i, Y[3]), mp(i, Y[3]+1)), i + Y[3] + 1);		
	}

	for (int i = Y[2]; i <= Y[3]; ++i) {
		edges.eb(mp(mp(X[2]-1, i), mp(X[2], i)), -i - X[2]);
		edges.eb(mp(mp(X[3], i), mp(X[3]+1, i)), i + X[3] + 1);	
	}

	for (auto p : vl) {
		for (auto q : vr) {
			for (auto e : edges) {
				ll c = way(e.fi.fi.fi - p.fi.fi, e.fi.fi.se - p.fi.se) * way(q.fi.fi - e.fi.se.fi, q.fi.se - e.fi.se.se) % MOD;
				c = c * p.se * q.se * e.se % MOD;
				if (c < 0) c += MOD;
				ans += c;
				if (ans >= MOD) ans -= MOD;
			}
		}
	}

	cout << ans << endl;

	return 0;
}