#include <iostream>
using namespace std;
FILE *f = fopen("plus.in", "r"), *g = fopen("plus.out", "w");
long long S, N1, N2, N3, B1, B2, B3;
long long numar = 0;
void swap(long long *a, long long *b, long long *c, long long *d)
{
int aux = *a;
*a = *b;
*b = aux;
aux = *c;
*c = *d;
*d = aux;
}
long long min(long long a, long long b)
{
if (a < b)
return a;
return b;
}
void afisare(long long x)
{
fprintf(g, "%lld", x);
fclose(g);
}
int main()
{
fscanf(f, "%lld\n", &S);
fscanf(f, "%lld %lld", &N1, &B1);
fscanf(f, "%lld %lld", &N2, &B2);
fscanf(f, "%lld %lld", &N3, &B3);
fclose(f);
if (B1 <= B2)
{
if (B3 <= B1)
{
swap(&B1, &B3, &N1, &N3);
swap(&B2, &B3, &N2, &N3);
}
else
{
if (B3 < B2)
{
swap(&B2, &B3, &N2, &N3);
}
}
}
else
{
swap(&B1, &B2, &N1, &N2);
if (B3 <= B1)
{
swap(&B1, &B3, &N1, &N3);
swap(&B2, &B3, &N1, &N3);
}
else
{
if (B3 < B2)
{
swap(&B2, &B3, &N2, &N3);
}
}
}
if (B3 == -1)
{
if (S == 0)
{
afisare(1);
return 0;
}
afisare(0);
return 0;
}
if ((B2 == -1) && (B3 == 0))
{
if (S == 0)
{
afisare(1 + N3);
return 0;
}
afisare(0);
return 0;
}
if ((B2 == -1) && (B3 == 1))
{
if (S == 0)
{
afisare(1);
return 0;
}
if (S <= N1)
{
afisare(1);
return 0;
}
afisare(0);
return 0;
}
if ((B1 == -1) && (B3 == 0)) // -1 0 0
{
if (S > 0)
{
afisare(0);
return 0;
}
afisare(1 + N2 + N3 + N2 * N3);
return 0;
}
if ((B1 == -1) && (B2 == 0) && (B3 == 1)) // -1 0 1
{
if (S == 0)
{
afisare(1 + N2 + min(N1, N3) * N2);
return 0;
}
long long i = S, j = 0;
while ((i <= N3) && (j <= N1))
{
++i;
++j;
numar = numar + N2;
}
}
if ((B1 == -1) && (B2 == 1)) // - 1 -1 1
{
if (S == 0)
{
numar = 1 + min(N2, N1) + min(N3, N1);
long long i = S, j = 0;
while ((i <= N2 + N3) && (j <= N1))
{
++i;
++j;
//tb sa vad in cate moduri se poate obtine i din N2 si N3
long long i1 = i, j1 = 0;
while ((i1 >= 0) && (j1 <= N3))
{
if (i1 <= N2)
{
numar++;
}
--i1;
++j1;
}
}
afisare(numar);
return 0;
}
if (S > N2 + N3)
{
afisare(0);
return 0;
}
long long i = S, j = 0;
while ((i <= N2 + N3) && (j <= N1))
{
//trebuie sa vedem in cate moduri se poate face i;
long long i1 = i, j1 = 0;
while ((i1 >= 0) && (j1 <= N3))
{
if (i1 <= N2)
{
numar++;
}
--i1;
++j1;
}
++i;
++j;
}
}
if (B3 == 0) // 0 0 0
{
if (S > 0)
{
afisare(0);
return 0;
}
numar = 1 + N1 + N2 + N3 + N1 * N2 + N1 * N3 + N2 * N3 + N1 * N2 * N3;
afisare(numar);
return 0;
}
if ((B2 == 0) && (B3 == 1)) // 0 0 1
{
if (S == 0)
{
numar = 1 + N1 + N2 + N1 * N2;
afisare(numar);
return 0;
}
if (S > N3)
{
afisare(0);
return 0;
}
numar = 1 + N1 + N2 + N1 * N2;
afisare(numar);
return 0;
}
if ((B1 == 0) && (B2 == 1)) //0 1 1
{
if (S == 0)
{
numar = 1 + N1;
afisare(numar);
return 0;
}
if (S > N2 + N3)
{
afisare(0);
return 0;
}
// in cate moduri se poate obtine S din N2 si N3 inmultita cu (1 + N1)
long long i = S, j = 0;
while ((i >= 0) && (j <= N3))
{
if (i <= N2)
{
numar++;
}
--i;
++j;
}
numar = numar * (1 + N1);
afisare(numar);
return 0;
}
if (B3 == 1) // 1 1 1
{
if (S == 0)
{
afisare(0);
return 0;
}
if (N1 + N2 + N3 < S)
{
afisare(0);
return 0;
}
// in cate moduri se poate obtine S din N1, N2 si N3
for (long long i = min(S, N1); i >= 0; --i)
{
// in cate moduri se poate obtine S - i din N2 si N3
long long j = S - i, k = 0;
while ((j >= 0) && ( k <= N3))
{
if (j <= N2)
{
++numar;
}
--j;
++k;
}
}
afisare(numar);
return 0;
}
return 0;
}