/*
TASK:water
LANG:C++
*/
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define MAXN 256

#define m1 (given[0][take] = true)
#define m2 (given[1][take] = true)

#define MARK (given[0][give] = given[1][give] = true)

#define s1 (given[0][take] == false)
#define s2 (given[1][take] == false)

#define INFILE  "water.in"
#define OUTFILE "water2.out"

int V, K;
int a1, a2, b1, b2, c1, c2;
bool used[MAXN][MAXN][MAXN];
bool given[2][201];
long long ANS;

void rec(int level, int a, int b, int c) {
    
    if (level > K) {
        return;
    }
    if (used[a][b][c]) {
        return;
    }

    if (a == 1 || b == 1 || c == 1) {
        ANS++;
        return;
    }

    used[a][b][c] = true;
    
    int give, take;    

/////////////TAKEN FROM A
    //a gives
    memset(given, false, sizeof(given));

    if (a > a1) {
        give = a - a1;
        MARK;
        rec(level+1, a-give, b+give, c);
        rec(level+1, a-give, b, c+give);
    }
    if (a > a2) {
        give = a - a2;
        MARK;
        rec(level+1, a-give, b+give, c);
        rec(level+1, a-give, b, c+give);
    }
    give = a;
    MARK;
    rec(level+1, 0, b+give, c);
    rec(level+1, 0, b, c+give);

    //b takes
    take = b1 - b;
    if (take > 0 && take < a && s1) {
        rec(level+1, a-take, b+take, c);
    }
    take = b2 - b;
    if (take > 0 && take < a && s1) {
        rec(level+1, a-take, b+take, c);
    }

    //c takes
    take = c1 - c;
    if (take > 0 && take < a && s2) {
        rec(level+1, a-take, b, c+take);
    }
    take = c2 - c;
    if (take > 0 && take < a && s2) {
        rec(level+1, a-take, b, c+take);
    }
    
/////////////TAKEN FROM B
    //b gives
    memset(given, false, sizeof(given));

    if (b > b1) {
        give = b - b1;
        MARK;
        rec(level+1, a+give, b-give, c);
        rec(level+1, a, b-give, c+give);
    }
    if (b > b2) {
        give = b - b2;
        MARK;
        rec(level+1, a+give, b-give, c);
        rec(level+1, a, b-give, c+give);
    }
    give = b;
    MARK;
    rec(level+1, a+give, 0, c);
    rec(level+1, a, 0, c+give);

    //a takes
    take = a1 - a;
    if (take > 0 && take < b && s1) {
        rec(level+1, a+take, b-take, c);
    }
    take = a2 - a;
    if (take > 0 && take < b && s1) {
        rec(level+1, a+take, b-take, c);
    }

    //c takes
    take = c1 - c;
    if (take > 0 && take < b && s2) {
        rec(level+1, a, b-take, c+take);
    }
    take = c2 - c;
    if (take > 0 && take < b && s2) {
        rec(level+1, a, b-take, c+take);
    }

/////////////TAKEN FROM C
    memset(given, false, sizeof(given));

    //c gives
    if (c > c1) {
        give = c - c1;
        MARK;
        rec(level+1, a+give, b, c-give);
        rec(level+1, a, b+give, c-give);
    }       
    if (c > c2) {
        give = c - c2;
        MARK;
        rec(level+1, a+give, b, c-give);
        rec(level+1, a, b+give, c-give);
    }
    give = c;
    MARK;
    rec(level+1, a+give, b, 0);
    rec(level+1, a, b+give, 0);
    
    //a takes
    take = a1 - a; 
    if (take > 0 && take < c && s1) {
        rec(level+1, a+take, b, c-take);
    }
    take = a2 - a;
    if (take > 0 && take < c && s1) {
        rec(level+1, a+take, b, c-take);
    }

    //b takes
    take = b1 - b;
    if (take > 0 && take < c && s2) {
        rec(level+1, a, b+take, c-take);
    }
    take = b2 - b;
    if (take > 0 && take < c && s2) {
        rec(level+1, a, b+take, c-take);
    }

//END
    used[a][b][c] = false;
    
    return;
}

int main() {
//    freopen(INFILE, "rt", stdin);
//    freopen(OUTFILE, "wt", stdout);
    
    scanf("%d%d", &V, &K);
    scanf("%d%d%d%d%d%d", &a1, &a2, &b1, &b2, &c1, &c2);
    
    ANS = 0;
    rec(0, V, 0, 0);
    
    printf("%lld\n", ANS);
    
    return 0;
}
