#include <cstdio>
#include <cstring>

const int mod = 1000000007;

int a1 , a2 , a3 , a4 , a5;
int dp[15][15][15][15][15][2][2][2][2][2];

void read() {
	scanf ( "%d%d%d%d%d" , &a1 , &a2 , &a3 , &a4 , &a5 );
}

int go ( int x1 , int x2 , int x3 , int x4 , int x5 , int y1 , int y2 , int y3 , int y4 , int y5 ) {
	if ( x1 == 15 ) { x1 = 14; y1 = 1; };
	if ( x2 == 15 ) { x2 = 14; y2 = 1; };
	if ( x3 == 15 ) { x3 = 14; y3 = 1; };
	if ( x4 == 15 ) { x4 = 14; y4 = 1; };
	if ( x5 == 15 ) { x5 = 14; y5 = 1; };
	
	int &ans = dp[x1][x2][x3][x4][x5][y1][y2][y3][y4][y5];
	if ( ans != -1 ) return ans;
	
	ans = 0;
	int n1 , n2 , n3 , n4 , n5;
	int o1 , o2 , o3 , o4 , o5;
	
	n1 = a1 / (1 << x1) - y1;
	n2 = a2 / (1 << x2) - y2;
	n3 = a3 / (1 << x3) - y3;
	n4 = a4 / (1 << x4) - y4;
	n5 = a5 / (1 << x5) - y5;
	
	if ( n1 == 0 && n2 == 0 && n3 == 0 && n4 == 0 && n5 == 0 ) 
		return ans = 1;
	
	o1 = n1 & 1;
	o2 = n2 & 1;
	o3 = n3 & 1;
	o4 = n4 & 1;
	o5 = n5 & 1;
	
	if ( o1 && o2 )	ans += go ( x1 , x2 , x3 , x4 , x5 , 1 , 1 , y3 , y4 , y5 ); if ( ans >= mod ) ans -= mod;
	if ( o2 && o3 ) ans += go ( x1 , x2 , x3 , x4 , x5 , y1 , 1 , 1 , y4 , y5 ); if ( ans >= mod ) ans -= mod;
	if ( o3 && o4 )	ans += go ( x1 , x2 , x3 , x4 , x5 , y1 , y2 , 1 , 1 , y5 ); if ( ans >= mod ) ans -= mod;
	if ( o4 && o5 )	ans += go ( x1 , x2 , x3 , x4 , x5 , y1 , y2 , y3 , 1 , 1 ); if ( ans >= mod ) ans -= mod;
	if ( o1 && o5 )	ans += go ( x1 , x2 , x3 , x4 , x5 , 1 , y2 , y3 , y4 , 1 ); if ( ans >= mod ) ans -= mod;
	
	if ( n1 && n2 ) ans += go ( x1 + 1 , x2 + 1 , x3 , x4 , x5 , 0 , 0 , y3 , y4 , y5 ); if ( ans >= mod ) ans -= mod;
	if ( n2 && n3 ) ans += go ( x1 , x2 + 1 , x3 + 1 , x4 , x5 , y1 , 0 , 0 , y4 , y5 ); if ( ans >= mod ) ans -= mod;
	if ( n3 && n4 ) ans += go ( x1 , x2 , x3 + 1 , x4 + 1 , x5 , y1 , y2 , 0 , 0 , y5 ); if ( ans >= mod ) ans -= mod; 
	if ( n4 && n5 ) ans += go ( x1 , x2 , x3 , x4 + 1 , x5 + 1 , y1 , y2 , y3 , 0 , 0 ); if ( ans >= mod ) ans -= mod;
	if ( n1 && n5 ) ans += go ( x1 + 1 , x2 , x3 , x4 , x5 + 1 , 0 , y2 , y3 , y4 , 0 ); if ( ans >= mod ) ans -= mod;
	
// 	printf ( "%d %d %d %d %d    %d %d %d %d %d\n" , x1 , x2 , x3 , x4 , x5 , y1 , y2 , y3 , y4 , y5 );
// 	printf ( "%d %d %d %d %d\n" , n1 , n2 , n3 , n4 , n5 );
	
	return ans;
}

void solve() {
	memset ( dp , -1 , sizeof dp );
	
// 	printf ( "%d\n" , go ( 1 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 ) );
	printf ( "%d\n" , go ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) );
}

int main() {
	read();
	solve();
	
	return 0;
}
