#include <cstdio>
#include <algorithm>
#include <cctype>
#include <cstring>
#include <cmath>
using namespace std;
inline int read(int f = 1, int x = 0, char ch = ' ')
{
    while(!isdigit(ch = getchar())) if(ch == '-') f = -1;
    while(isdigit(ch)) x = x*10+ch-'0', ch = getchar();
    return f*x;
}
const int P = 1e9+7, N = 2e6+10;
int X[6], Y[6];
int fac[N], ifac[N], kX[2][4], kY[2][4], ans;
int inv(int i) { return i == 1?i:P-1ll*(P/i)*inv(P%i)%P; }
int C(int n, int m) { return 1ll*fac[n]*ifac[m]%P*ifac[n-m]%P; }
int G(int x1, int y1, int x2, int y2) { return C(abs(x1-x2)+abs(y1-y2), abs(x1-x2));  }
int F(int x1, int y1, int x3, int y3, int o)
{
    int ret = 0;
    for(int x2 = X[2]; x2 <= X[3]; ++x2)
        ret = (ret+P-1ll*G(x1, y1, x2, Y[2]-1)*G(x2, Y[2], x3, y3)%P*(x2+Y[2])%P)%P,
        ret = (ret+1ll*G(x1, y1, x2, Y[3])*G(x2, Y[3]+1, x3, y3)%P*(x2+Y[3]+1)%P)%P;
    for(int y2 = Y[2]; y2 <= Y[3]; ++y2)
        ret = (ret+P-1ll*G(x1, y1, X[2]-1, y2)*G(X[2], y2, x3, y3)%P*(X[2]+y2)%P)%P,
        ret = (ret+1ll*G(x1, y1, X[3], y2)*G(X[3]+1, y2, x3, y3)%P*(X[3]+y2+1)%P)%P;        
    return o?P-ret:ret;
}
int main()
{
    for(int i = 0; i < 6; ++i) X[i] = read();
    for(int i = 0; i < 6; ++i) Y[i] = read();
    fac[0] = ifac[0] = 1;
    for(int i = 1; i <= X[5]+Y[5]+2; ++i) fac[i] = 1ll*i*fac[i-1]%P;
    ifac[X[5]+Y[5]+2] = inv(fac[X[5]+Y[5]+2]);
    for(int i = X[5]+Y[5]+1; i; --i) ifac[i] = 1ll*(i+1)*ifac[i+1]%P;
    kX[0][0] = X[0]-1, kY[0][0] = Y[0]-1, kX[0][1] = X[1], kY[0][1] = Y[0]-1, kX[0][2] = X[1], kY[0][2] = Y[1], kX[0][3] = X[0]-1, kY[0][3] = Y[1];
    kX[1][0] = X[4], kY[1][0] = Y[4], kX[1][1] = X[4], kY[1][1] = Y[5]+1, kX[1][2] = X[5]+1, kY[1][2] = Y[5]+1, kX[1][3] = X[5]+1, kY[1][3] = Y[4];
    for(int i = 0; i < 4; ++i)
        for(int j = 0; j < 4; ++j)
            ans = (ans+F(kX[0][i], kY[0][i], kX[1][j], kY[1][j], (i^j)&1))%P;
    printf("%d\n", ans);
    return 0;
}