/*
TASK: zero
LANG: C++
*/
#include <stdio.h>
#include <iostream>
#include <string.h>

using namespace std;

const int MOD = 1000000007;

int dp[32][32][32][32][32];

int calc(int a1, int a2, int a3, int a4, int a5)
{
    //cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << a5 << endl;
    if(dp[a1][a2][a3][a4][a5] != -1) return dp[a1][a2][a3][a4][a5];
    if(!a1 && !a2 && !a3 && !a4 && !a5) return 1;

    int ret = 0;
    if(a1 % 2 && a2 % 2)
    {
        ret += calc(a1 - 1, a2 - 1, a3, a4, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a2 % 2 && a3 % 2)
    {
        ret += calc(a1, a2 - 1, a3 - 1, a4, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a3 % 2 && a4 % 2)
    {
        ret += calc(a1, a2, a3 - 1, a4 - 1, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a4 % 2 && a5 % 2)
    {
        ret += calc(a1, a2, a3, a4 - 1, a5 - 1);
        if(ret >= MOD) ret -= MOD;
    }
    if(a5 % 2 && a1 % 2)
    {
        ret += calc(a1 - 1, a2, a3, a4, a5 - 1);
        if(ret >= MOD) ret -= MOD;
    }

    if(a1 && a2)
    {
        ret += calc(a1 >> 1, a2 >> 1, a3, a4, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a2 && a3)
    {
        ret += calc(a1, a2 >> 1, a3 >> 1, a4, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a3 && a4)
    {
        ret += calc(a1, a2, a3 >> 1, a4 >> 1, a5);
        if(ret >= MOD) ret -= MOD;
    }
    if(a4 && a5)
    {
        ret += calc(a1, a2, a3, a4 >> 1, a5 >> 1);
        if(ret >= MOD) ret -= MOD;
    }
    if(a5 && a1)
    {
        ret += calc(a1 >> 1, a2, a3, a4, a5 >> 1);
        if(ret >= MOD) ret -= MOD;
    }

    dp[a1][a2][a3][a4][a5] = ret;
    return ret;
}

int main()
{
    int a1, a2, a3, a4, a5;
    scanf("%d %d %d %d %d",&a1,&a2,&a3,&a4,&a5);
    memset(dp, -1, sizeof(dp));
    printf("%d\n",calc(a1, a2, a3, a4, a5));

    return 0;
}
