#include <cstdio>
#include <map>
#include <vector>
#define next(i) (i+1 == 5)?0:i+1
using namespace std;

const int mod = 1000000007;

vector<int> vec;

map<vector<int>, int> dp;

int solve(vector<int> state)
{
	/*printf("in: ");
	for (int i=0; i < 5; ++i)
		printf("%d ", state[i]);
	printf("\n");*/
	if (dp.find(state) != dp.end()) return dp[state];

	int &ref = dp[state];
	ref = 0;

	for (int i=0; i < 5; ++i)
		if (state[i] && state[next(i)])
		{
			int old = state[i];
			int old2 = state[next(i)];

			int &cur = state[i];
			int &next = state[next(i)];

			if (cur & 1)
				if (next & 1)
				{
					cur--;
					next--;
					ref += solve(state);
					if (ref >= mod) ref -= mod;
					cur++;
					next++;
				}
			cur >>= 1;
			next >>= 1;
			ref += solve(state);
			if (ref >= mod) ref -= mod;
			cur=old;
			next=old2;
		}

	/*printf("found %d for: ", ref);

	for (int i=0; i < 5; ++i)
		printf("%d ", state[i]);
	printf("\n");*/
	return ref;
}

inline void read()
{
	for (int i=0; i < 5; ++i)
	{
		int cur;
		scanf("%d", &cur);
		vec.push_back(cur);
	}
}

int main()
{
	read();
	vector<int> a(5, 0);
	dp[a] = 1;

	printf("%d\n", solve(vec));
	return 0;
}
