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

bool visited[201][201][7];
int sol[201][201][7];

int v;
int max_operations_count;
int a1,a2;
int b1,b2;
int c1,c2;
int marks[3][2];

void load()
{
	FILE *fin;

	//fin = fopen("water.in","r");
	fin = stdin;

	fscanf(fin,"%d%d%d%d%d%d%d%d",&v,&max_operations_count,&a1,&a2,&b1,&b2,&c1,&c2);
	marks[0][0] = a1;
	marks[0][1] = a2;
	marks[1][0] = b1;
	marks[1][1] = b2;
	marks[2][0] = c1;
	marks[2][1] = c2;

	fclose(fin);
}

int do_solve(int _v1,int _v2,int rem_ops) {		
	int v1 = _v1;
	int v2 = _v2;
	int v3 = v - v1 - v2;

	if (v1 < 0)
		return 0;
	if (v2 < 0)
		return 0;
	if (v3 < 0)
		return 0;

	//printf("%d %d %d %d\n",v1,v2,v3,rem_ops);
	if (v1 == 1) 
		return 1;
	if (v2 == 1)
		return 1;
	if (v3 == 1) 
		return 1;		
	if (rem_ops == 0) 
		return 0;

	if (visited[v1][v2][rem_ops])
		return sol[v1][v2][rem_ops];

	visited[v1][v2][rem_ops] = true;
	sol[v1][v2][rem_ops] = 0;

	int source;
	int dest;
	int cur[3];
	int next[3];
	int pour_volume;
	cur[0] = v1;
	cur[1] = v2;
	cur[2] = v3;
	next[0] = v1;
	next[1] = v2;
	next[2] = v3;
	for (source=0;source<3;source++)
		for (dest=0;dest<3;dest++)
			if (source != dest) {
				if (cur[source] > marks[source][0]) {
					pour_volume = cur[source] - marks[source][0];
					next[source] = cur[source] - pour_volume;
					next[3 - source - dest] = v - next[source] - next[dest];
					next[dest] = cur[dest] + pour_volume;

					if (!visited[next[0]][next[1]][rem_ops-1])
						sol[v1][v2][rem_ops] += do_solve(next[0],next[1],rem_ops-1);					
				}
				if (cur[source] > marks[source][1]) {
					pour_volume = cur[source] - marks[source][1];
					next[source] = cur[source] - pour_volume;
					next[3 - source - dest] = v - next[source] - next[dest];
					next[dest] = cur[dest] + pour_volume;

					if (!visited[next[0]][next[1]][rem_ops-1])
						sol[v1][v2][rem_ops] += do_solve(next[0],next[1],rem_ops-1);					
				}
				if (cur[source] > 0) {
					pour_volume = cur[source];
					next[source] = cur[source] - pour_volume;
					next[3 - source - dest] = v - next[source] - next[dest];
					next[dest] = cur[dest] + pour_volume;

					if (!visited[next[0]][next[1]][rem_ops-1])
						sol[v1][v2][rem_ops] += do_solve(next[0],next[1],rem_ops-1);					
				}

				pour_volume = marks[dest][0] - cur[dest];
				if (pour_volume > 0 && pour_volume <= cur[source]) {
					next[source] = cur[source] - pour_volume;
					next[3 - source - dest] = v - next[source] - next[dest];
					next[dest] = cur[dest] + pour_volume;

					if (!visited[next[0]][next[1]][rem_ops-1])
						sol[v1][v2][rem_ops] += do_solve(next[0],next[1],rem_ops-1);
				}

				pour_volume = marks[dest][1] - cur[dest];
				if (pour_volume > 0 && pour_volume <= cur[source]) {
					next[source] = cur[source] - pour_volume;
					next[3 - source - dest] = v - next[source] - next[dest];
					next[dest] = cur[dest] + pour_volume;

					if (!visited[next[0]][next[1]][rem_ops-1])
						sol[v1][v2][rem_ops] += do_solve(next[0],next[1],rem_ops-1);
				}
			}
	
	return sol[v1][v2][rem_ops];
}

void solve() {
	do_solve(v,0,max_operations_count);
}

void save() {
	printf("%d\n",sol[v][0][max_operations_count]);
}

int main()
{
	memset(&visited,0,sizeof(visited));	
	load();	
	solve();
	save();

	return 0;
}