/*
TASK:water
LANG:C
*/

#include <stdio.h>

typedef struct { int a[3]; } pos;

pos POS(int a, int b, int c);
int is_zero(pos a);
int is_one(pos a);
int is_equal(pos a, pos b);
pos fill_1(int a, int b, pos z);
pos fill_2(int a, int b, pos z);
pos fill_3(int a, int b, pos z);
pos fill_4(int a, int b, pos z);
pos fill_5(int a, int b, pos z);
void input(void);
void solve(void);
void back(int lev, pos z);
void print(pos a);

int cap[3];
int lim[3][2];
int v, k;

int used[205][205];
int cnt;

int main(void)
{ 
  input(); 
  solve();
  
  return 0;
}

pos POS(int a, int b, int c)
{
    pos z;
    z.a[0] = a; z.a[1] = b; z.a[2] = c;
    
    return z;
}

int is_equal(pos a, pos b)
{
    return a.a[0] == b.a[0] && a.a[1] == b.a[1];
}

int is_zero(pos a)
{
    return a.a[0] == 0 && a.a[1] == 0 && a.a[2] == 0;
}

int is_one(pos a)
{
    return a.a[0] == 1 || a.a[1] == 1 || a.a[2] == 1;
}

pos fill_1(int a, int b, pos z)
{
    if(z.a[a] == 0) return POS(0, 0, 0);
    
    if(cap[b] - z.a[b] < a) return POS(0, 0, 0);
    
    z.a[b] += z.a[a]; z.a[a] = 0;
    
    return POS(z.a[0], z.a[1], v - (z.a[0] + z.a[1]));
}

pos fill_2(int a, int b, pos z)
{
    if(z.a[a] == 0) return POS(0, 0, 0);
    
    if(lim[a][0] >= z.a[a]) return POS(0, 0, 0);
    
    if(cap[b] - z.a[b] < z.a[a] - lim[a][0]) return POS(0, 0, 0);
    
    z.a[b] += z.a[a] - lim[a][0]; z.a[a] = lim[a][0];
    
    return POS(z.a[0], z.a[1], v - (z.a[0] + z.a[1]));
}

pos fill_3(int a, int b, pos z)
{
    if(z.a[a] == 0) return POS(0, 0, 0);
    
    if(lim[a][1] >= z.a[a]) return POS(0, 0, 0);
    
    if(cap[b] - z.a[b] < z.a[a] - lim[a][1]) return POS(0, 0, 0);
    
    z.a[b] += z.a[a] - lim[a][1]; z.a[a] = lim[a][1];
    
    return POS(z.a[0], z.a[1], v - (z.a[0] + z.a[1]));
}

pos fill_4(int a, int b, pos z)
{
    if(z.a[a] == 0) return POS(0, 0, 0);
    
    if(lim[b][0] <= z.a[b]) return POS(0, 0, 0);
    
    if(lim[b][0] - z.a[b] > z.a[a]) return POS(0, 0, 0);
    
    z.a[a] -= lim[b][0] - z.a[b]; z.a[b] = lim[b][0];
    
    return POS(z.a[0], z.a[1], v - (z.a[0] + z.a[1]));
}

pos fill_5(int a, int b, pos z)
{
    if(z.a[a] == 0) return POS(0, 0, 0);
    
    if(lim[b][1] <= z.a[b]) return POS(0, 0, 0);
    
    if(lim[b][1] - z.a[b] > z.a[a]) return POS(0, 0, 0);
    
    z.a[a] -= lim[b][1] - z.a[b]; z.a[b] = lim[b][1];
    
    return POS(z.a[0], z.a[1], v - (z.a[0] + z.a[1]));
}

void input(void)
{
     int i;
     
     scanf("%d %d", &v, &k);
     
     for(i = 0; i < 3; i++) cap[i] = v;
     
     for(i = 0; i < 3; i++) scanf("%d %d", &lim[i][0], &lim[i][1]);
     
     return 1;
}

void solve(void)
{
     pos z;
     int i, j;
     
     z = POS(cap[0], 0, 0);
     
     for(i = 0; i <= v; i++) 
       for(j = 0; j <= v; j++) used[i][j] = 0;
       
     used[z.a[0]][z.a[1]] = 1;
     
     cnt = 0;
     
     back(0, z);
     
     printf("%d\n", cnt);
}

void print(pos a)
{
     printf("a = %d b = %d c = %d\n", a.a[0], a.a[1], a.a[2]);
}


void back(int lev, pos z)
{
     pos pot1, pot2, pot3, pot4, pot5;
     int i, j;
     
     if(lev > k) return;
     
     if(is_one(z)) { 
       cnt++; 
       return; 
     }
     
     for(i = 0; i < 3; i++)
       for(j = 0; j < 3; j++) {
         if(i == j) continue;
         
         pot1 = fill_1(i, j, z);
         if(!used[pot1.a[0]][pot1.a[1]] && !is_zero(pot1)) {
           used[pot1.a[0]][pot1.a[1]] = 1;
           back(lev + 1, pot1);
           used[pot1.a[0]][pot1.a[1]] = 0;
         }
         
         pot2 = fill_2(i, j, z);
         if(!is_equal(pot1, pot2))
         if(!used[pot2.a[0]][pot2.a[1]] && !is_zero(pot2)) {
           used[pot2.a[0]][pot2.a[1]] = 1;
           back(lev + 1, pot2);
           used[pot2.a[0]][pot2.a[1]] = 0;
         }
         
         pot3 = fill_3(i, j, z);
         if(!is_equal(pot1, pot3) && !is_equal(pot2, pot3))
         if(!used[pot3.a[0]][pot3.a[1]] && !is_zero(pot3)) {
           used[pot3.a[0]][pot3.a[1]] = 1;
           back(lev + 1, pot3);
           used[pot3.a[0]][pot3.a[1]] = 0;
         }
         
         pot4 = fill_4(i, j, z);
         if(!is_equal(pot1, pot4) && !is_equal(pot2, pot4) && !is_equal(pot3, pot4))
         if(!used[pot4.a[0]][pot4.a[1]] && !is_zero(pot4)) {
           used[pot4.a[0]][pot4.a[1]] = 1;
           back(lev + 1, pot4);
           used[pot4.a[0]][pot4.a[1]] = 0;
         }
         
         pot5 = fill_5(i, j, z);
         if(!is_equal(pot1, pot5) && !is_equal(pot2, pot5) && 
            !is_equal(pot3, pot5) && !is_equal(pot4, pot5))
         if(!used[pot5.a[0]][pot5.a[1]] && !is_zero(pot5)) {
           used[pot5.a[0]][pot5.a[1]] = 1;
           back(lev + 1, pot5);
           used[pot5.a[0]][pot5.a[1]] = 0;
         }
       }
}  
         
         
