/*
TASK:water
LANG:C
*/

#include <stdio.h>
#include <string.h>

typedef struct SNode
{
  short a[3];
  long prev;
}node;

short v, k, del[3][2];
long queue[100000], qs=0, qe=0, tc=0, res=0, tb;
node tree[100000];

void add(short x, short y, short z, long prev)
{
  tree[tc].a[0]=x;
  tree[tc].a[1]=y;
  tree[tc].a[2]=z;
  tree[tc].prev=prev;
  queue[qe++]=tc++;
}

int get(long *i)
{
  if(qe==qs)
    return 0;
  *i=queue[qs++];
  return 1;
}

int cmpnode(long n1, long n2)
{
  if(tree[n1].a[0]!=tree[n2].a[0] || tree[n1].a[1]!=tree[n2].a[1] || tree[n1].a[2]!=tree[n2].a[2])
    return 0;
  return 1;
}

short geth(long n)
{
  static short t;
  for(t=0; n!=-1; n=tree[n].prev)
    ++t;
  return t;
}

int check(short x, short y, short z, long n)
{
  for(; n!=-1; n=tree[n].prev)
    if(x==tree[n].a[0] && y==tree[n].a[1] && z==tree[n].a[2])
      return 0;
  for(n=tb; n<tc; ++n)
    if(x==tree[n].a[0] && y==tree[n].a[1] && z==tree[n].a[2])
      return 0;
   return 1;
}

int main(void)
{
  char i, j;
  long n;
  short h, x[3];
  scanf("%hd %hd %hd %hd %hd %hd %hd %hd", &v, &k, &del[0][0], &del[0][1], &del[1][0], &del[1][1], &del[2][0], &del[2][1]);
  add(v, 0, 0, -1);
  while(get(&n))
  {
    if(tree[n].a[0]==1||tree[n].a[1]==1||tree[n].a[2]==1)
    {
      ++res;
      continue;
    }
    h=geth(n);
    if(h>k)
      continue;
    tb=tc;
    for(i=0; i<3; ++i)
      for(j=0; j<3; ++j)
        if(i!=j)
        {
          if(tree[n].a[i]>del[i][0] && tree[n].a[j]+tree[n].a[i]-del[i][0]<=v)
          {
            memcpy(x, tree[n].a, 6);
            x[i]=del[i][0];
            x[j]+=tree[n].a[i]-del[i][0];
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
          if(tree[n].a[i]>del[i][1] && tree[n].a[j]+tree[n].a[i]-del[i][1]<=v)
          {
            memcpy(x, tree[n].a, 6);
            x[i]=del[i][1];
            x[j]+=tree[n].a[i]-del[i][1];
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
          if(tree[n].a[i] && tree[n].a[j]+tree[n].a[i]<=v)
          {
            memcpy(x, tree[n].a, 6);
            x[i]=0;
            x[j]+=tree[n].a[i];
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
          if(del[j][0]>tree[n].a[j] && tree[n].a[i]>del[j][0]-tree[n].a[j] && del[j][0]-tree[n].a[j] != del[i][0]-tree[n].a[i] && del[j][0]-tree[n].a[j] != del[i][1]-tree[n].a[i])
          {
            memcpy(x, tree[n].a, 6);
            x[i]-=del[j][0]-tree[n].a[j];
            x[j]=del[j][0];
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
          if(del[j][1]>tree[n].a[j] && tree[n].a[i]>del[j][1]-tree[n].a[j] && del[j][1]-tree[n].a[j] != del[i][0]-tree[n].a[i] && del[j][1]-tree[n].a[j] != del[i][1]-tree[n].a[i])
          {
            memcpy(x, tree[n].a, 6);
            x[i]-=del[j][1]-tree[n].a[j];
            x[j]=del[j][1];
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
          if(v>tree[n].a[j] && tree[n].a[i]>v-tree[n].a[j] && v-tree[n].a[j] != del[i][0]-tree[n].a[i] && v-tree[n].a[j] != del[i][1]-tree[n].a[i])
          {
            memcpy(x, tree[n].a, 6);
            x[i]-=v-tree[n].a[j];
            x[j]=v;
            if(check(x[0], x[1], x[2], n))
              add(x[0], x[1], x[2], n);
          }
        }
  }
  printf("%ld\n", res);
  return 0;
}

