#include <cstdio>
typedef unsigned int ui32_t;
ui32_t Pos[4][16][16][16][16][32];
ui32_t A[5], EA[5], TotalExp, a, b, c, d, e;
int i;
ui32_t K=0;
inline void DoBaileys(ui32_t e){
    if((e&3)==3){
        Pos[K][a][b][c][d][e^3]+=Pos[K][a][b][c][d][e];
        Pos[K][a][b][c][d][e^3]%=1000000007;
    }
    if((e&6)==6){
        Pos[K][a][b][c][d][e^6]+=Pos[K][a][b][c][d][e];
        Pos[K][a][b][c][d][e^6]%=1000000007;
    }
    if((e&12)==12){
        Pos[K][a][b][c][d][e^12]+=Pos[K][a][b][c][d][e];
        Pos[K][a][b][c][d][e^12]%=1000000007;
    }
    if((e&24)==24){
        Pos[K][a][b][c][d][e^24]+=Pos[K][a][b][c][d][e];
        Pos[K][a][b][c][d][e^24]%=1000000007;
    }
    if((e&17)==17){
        Pos[K][a][b][c][d][e^17]+=Pos[K][a][b][c][d][e];
        Pos[K][a][b][c][d][e^17]%=1000000007;
    }
    return;
}
const ui32_t Order32BCDesc[]={
    31,
    30,29,27,23,15,
    28,26,25,22,21,19,14,13,11,7,
    24,20,18,17,12,10,9,6,5,3,
    16,8,4,2,1,
    0
};
ui32_t Exp(ui32_t a){
    ui32_t E=0;
    while(1<<E<=a) E++;
    return E-1;
}
int main(){
    scanf("%u %u %u %u %u", A, A+1, A+2, A+3, A+4);
    EA[0]=Exp(A[0]);
    EA[1]=Exp(A[1]);
    EA[2]=Exp(A[2]);
    EA[3]=Exp(A[3]);
    EA[4]=Exp(A[4]);
    TotalExp=EA[0]+EA[1]+EA[2]+EA[3]+EA[4];
    Pos[K][EA[0]][EA[1]][EA[2]][EA[3]][((A[0]&1)<<4)+((A[1]&1)<<3)+((A[2]&1)<<2)+((A[3]&1)<<1)+((A[4]&1)<<0)]=1;
    for(i=TotalExp;i>0;i--){
        for(a=0;a<15;a++){
            for(b=0;b<15;b++){
                for(c=0;c<15;c++){
                    for(d=0;d<15;d++){
                        for(e=0;e<32;e++){
                            Pos[(K+2)%3][a][b][c][d][e]=0;
                        }
                    }
                }
            }
        }
        for(a=0;a<15;a++){
            for(b=0;b<15;b++){
                for(c=0;c<15;c++){
                    for(d=0;d<15;d++){
                        for(e=0;e<32;e++){
                            DoBaileys(Order32BCDesc[e]);
                        }
                    }
                }
            }
        }
        for(a=0;a<15;a++){
            for(b=0;b<15;b++){
                for(c=0;c<15;c++){
                    for(d=0;d<15;d++){
                        for(e=0;e<32;e++){
                            if(Pos[K][a][b][c][d][e]==0) continue;
                            if(a!=0&&b!=0){
                                Pos[(K+2)%3][a-1][b-1][c][d][((A[0]&(1<<EA[0]-a))?16:0)+((A[1]&(1<<EA[1]-b))?8:0)+(e&7)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+2)%3][a-1][b-1][c][d][((A[0]&(1<<EA[0]-a))?16:0)+((A[1]&(1<<EA[1]-b))?8:0)+(e&7)]%=1000000007;
                            }
                            if(b!=0&&c!=0){
                                Pos[(K+2)%3][a][b-1][c-1][d][((A[1]&(1<<EA[1]-b))?8:0)+((A[2]&(1<<EA[2]-c))?4:0)+(e&19)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+2)%3][a][b-1][c-1][d][((A[1]&(1<<EA[1]-b))?8:0)+((A[2]&(1<<EA[2]-c))?4:0)+(e&19)]%=1000000007;
                            }
                            if(c!=0&&d!=0){
                                Pos[(K+2)%3][a][b][c-1][d-1][((A[2]&(1<<EA[2]-c))?4:0)+((A[3]&(1<<EA[3]-d))?2:0)+(e&25)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+2)%3][a][b][c-1][d-1][((A[2]&(1<<EA[2]-c))?4:0)+((A[3]&(1<<EA[3]-d))?2:0)+(e&25)]%=1000000007;
                            }
                            if(d!=0&&i-a-b-c-d!=0){
                                Pos[(K+2)%3][a][b][c][d-1][((A[3]&(1<<EA[3]-d))?2:0)+((A[4]&(1<<EA[4]-i+a+b+c+d))?2:0)+(e&28)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+2)%3][a][b][c][d-1][((A[3]&(1<<EA[3]-d))?2:0)+((A[4]&(1<<EA[4]-i+a+b+c+d))?2:0)+(e&28)]%=1000000007;
                            }
                            if(a!=0&&i-a-b-c-d!=0){
                                Pos[(K+2)%3][a-1][b][c][d][((A[0]&(1<<EA[0]-a))?16:0)+((A[4]&(1<<EA[4]-i+a+b+c+d))?2:0)+(e&14)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+2)%3][a-1][b][c][d][((A[0]&(1<<EA[0]-a))?16:0)+((A[4]&(1<<EA[4]-i+a+b+c+d))?2:0)+(e&14)]%=1000000007;
                            }
                            if(a!=0&&b==0&&(e&8)!=0){
                                Pos[(K+1)%3][a-1][b][c][d][((A[0]&(1<<EA[0]))?16:0)+(e&7)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a-1][b][c][d][((A[0]&(1<<EA[0]))?16:0)+(e&7)]%=1000000007;
                            }
                            if(b!=0&&a==0&&(e&16)!=0){
                                Pos[(K+1)%3][a][b-1][c][d][((A[1]&(1<<EA[1]))?8:0)+(e&7)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b-1][c][d][((A[1]&(1<<EA[1]))?8:0)+(e&7)]%=1000000007;
                            }
                            if(b!=0&&c==0&&(e&4)!=0){
                                Pos[(K+1)%3][a][b-1][c][d][((A[1]&(1<<EA[1]))?8:0)+(e&19)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b-1][c][d][((A[1]&(1<<EA[1]))?8:0)+(e&19)]%=1000000007;
                            }
                            if(c!=0&&b==0&&(e&8)!=0){
                                Pos[(K+1)%3][a][b][c-1][d][((A[2]&(1<<EA[2]))?4:0)+(e&19)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c-1][d][((A[2]&(1<<EA[2]))?4:0)+(e&19)]%=1000000007;
                            }
                            if(c!=0&&(e&2)!=0){
                                Pos[(K+1)%3][a][b][c-1][d][((A[2]&(1<<EA[2]))?4:0)+(e&25)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c-1][d][((A[2]&(1<<EA[2]))?4:0)+(e&25)]%=1000000007;
                            }
                            if(d!=0&&c==0&&(e&4)!=0){
                                Pos[(K+1)%3][a][b][c][d-1][((A[3]&(1<<EA[3]))?2:0)+(e&25)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c][d-1][((A[3]&(1<<EA[3]))?2:0)+(e&25)]%=1000000007;
                            }
                            if(d!=0&&i-a+b+c+d==0&&(e&1)!=0){
                                Pos[(K+1)%3][a][b][c][d-1][((A[3]&(1<<EA[3]))?2:0)+(e&28)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c][d-1][((A[3]&(1<<EA[3]))?2:0)+(e&28)]%=1000000007;
                            }
                            if(i-a-b-c-d!=0&&d==0&&(e&2)!=0){
                                Pos[(K+1)%3][a][b][c][d][((A[4]&(1<<EA[4]))?1:0)+(e&28)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c][d][((A[4]&(1<<EA[4]))?1:0)+(e&28)]%=1000000007;
                            }
                            if(a!=0&&i-a-b-c-d==0&&(e&1)!=0){
                                Pos[(K+1)%3][a-1][b][c][d][((A[0]&(1<<EA[0]))?16:0)+(e&14)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a-1][b][c][d][((A[0]&(1<<EA[0]))?16:0)+(e&14)]%=1000000007;
                            }
                            if(i-a-b-c-d!=0&&a==0&&(e&16)!=0){
                                Pos[(K+1)%3][a][b][c][d][((A[4]&(1<<EA[4]))?1:0)+(e&14)]+=Pos[K][a][b][c][d][e];
                                Pos[(K+1)%3][a][b][c][d][((A[4]&(1<<EA[4]))?1:0)+(e&14)]%=1000000007;
                            }
                        }
                    }
                }
            }
        }
        K++;
        K%=3;
    }
    for(a=0;a<15;a++){
        for(b=0;b<15;b++){
            for(c=0;c<15;c++){
                for(d=0;d<15;d++){
                    for(e=0;e<32;e++){
                        DoBaileys(Order32BCDesc[e]);
                    }
                }
            }
        }
    }
    K++;
    K%=3;
    for(a=0;a<15;a++){
        for(b=0;b<15;b++){
            for(c=0;c<15;c++){
                for(d=0;d<15;d++){
                    for(e=0;e<32;e++){
                        DoBaileys(Order32BCDesc[e]);
                    }
                }
            }
        }
    }
    K+=2;
    K%=3;
    printf("%u\n", Pos[K][0][0][0][0][0]+Pos[(K+1)%3][0][0][0][0][0]);
    return 0;
}
