#include <iostream>
#include <cstring>

using namespace std;

const int modulo = 1000000007;

int code[5][1 << 15];
int decode[5][1 << 15];

int dp[31][31][31][31][31];
int a[5];

void scan(){
    for ( int i = 0; i < 5; ++i )
        cin >> a[i];
}


void mp ( int idx ){
    int k = a[idx];

    while ( k ){
        code[idx][k] = 1;
        if ( k & 1 ){
            --k;
            code[idx][k] = 1;
        }
        k /= 2;

    }

    int br = 0;

    for ( int i = 0; i <= a[idx]; ++i )
        if ( code[idx][i] ){
            code[idx][i] = br;
            decode[idx][br] = i;
            ++br;
        }
}
void mp(){
    for ( int i = 0; i < 5; ++i ){
        mp ( i );

    }
}

int f ( int a1, int a2, int a3, int a4, int a5 ){
  //  cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << a5 << endl;

    int c1 = code[0][a1], c2 = code[1][a2], c3 = code[2][a3], c4 = code[3][a4], c5 = code[4][a5];

  //  cout << c1 << " " << c2 << " " << c3 << " " << c4 << " " << c5 << "\n\n";

    if ( dp[c1][c2][c3][c4][c5] != -1 ) return dp[c1][c2][c3][c4][c5];

    int cur = 0;

    if ( a1 * a2 ) cur = ( cur + f ( a1 / 2, a2 / 2, a3, a4, a5 ) ) % modulo;
    if ( a2 * a3 ) cur = ( cur + f ( a1, a2 / 2, a3 / 2, a4, a5 ) ) % modulo;
    if ( a3 * a4 ) cur = ( cur + f ( a1, a2, a3 / 2, a4 / 2, a5 ) ) % modulo;
    if ( a4 * a5 ) cur = ( cur + f ( a1, a2, a3, a4 / 2, a5 / 2 ) ) % modulo;
    if ( a1 * a5 ) cur = ( cur + f ( a1 / 2, a2, a3, a4, a5 / 2 ) ) % modulo;

    if ( a1 % 2 && a2 % 2 ) cur = ( cur + f ( a1 - 1, a2 - 1, a3, a4, a5 ) ) % modulo;
    if ( a2 % 2 && a3 % 2 ) cur = ( cur + f ( a1, a2 - 1, a3 - 1, a4, a5 ) ) % modulo;
    if ( a3 % 2 && a4 % 2 ) cur = ( cur + f ( a1, a2, a3 - 1, a4 - 1, a5 ) ) % modulo;
    if ( a4 % 2 && a5 % 2 ) cur = ( cur + f ( a1, a2, a3, a4 - 1, a5 - 1 ) ) % modulo;
    if ( a1 % 2 && a5 % 2 ) cur = ( cur + f ( a1 - 1, a2, a3, a4, a5 - 1 ) ) % modulo;

   // cout << cur << endl;

    return dp[c1][c2][c3][c4][c5] = cur;
}
void solve(){
    mp();
    memset ( dp, -1, sizeof ( dp ) );

    dp[0][0][0][0][0]= 1;

   cout << f ( a[0], a[1], a[2], a[3], a[4] ) << endl;


}
int main(){
    scan();
    solve();
}
