#include<bits/stdc++.h>
using namespace std;
inline void rd(int &x){
  int k, m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void wt_L(char a){
  putchar_unlocked(a);
}
inline void wt_L(long long x){
  char f[20];
  int m=0, s=0;
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
template<class S, class T> inline S chmax(S &a, T b){
  if(a<b){
    a=b;
  }
  return a;
}
int N;
int G[2];
int S[2];
int B[2];
int dp[5001];
long long solve(long long N, int A[]){
  return N + (N / A[0]) * (A[1] - A[0]);
}
long long solve(long long N, int A[], int B[]){
  long long i, j, k, res=0;
  for(i=0;;i++){
    k = N - A[0] * i;
    if(k < 0){
      break;
    }
    j = k / B[0];
    chmax(res, N + i * (A[1]-A[0]) + j * (B[1]-B[0]));
  }
  return res;
}
int main(){
  int a[2][2], i, j, k, sz;
  long long res;
  rd(N);
  {
    int Lj4PdHRW;
    for(Lj4PdHRW=0;Lj4PdHRW<2;Lj4PdHRW++){
      rd(G[Lj4PdHRW]);
      rd(S[Lj4PdHRW]);
      rd(B[Lj4PdHRW]);
    }
  }
  if(G[0] >= G[1] && S[0] >= S[1] && B[0] >= B[1]){
    swap(G[0], G[1]);
    swap(S[0], S[1]);
    swap(B[0], B[1]);
  }
  if(G[0] <= G[1] && S[0] <= S[1] && B[0] <= B[1]){
    for(i=0;i<N+1;i++){
      dp[i] = i;
    }
    for(i=G[0];i<N+1;i++){
      chmax(dp[i], dp[i-G[0]] + G[1]);
    }
    for(i=S[0];i<N+1;i++){
      chmax(dp[i], dp[i-S[0]] + S[1]);
    }
    for(i=B[0];i<N+1;i++){
      chmax(dp[i], dp[i-B[0]] + B[1]);
    }
    res = dp[N];
  }
  else{
    int KL2GvlyY;
    res = N;
    for(KL2GvlyY=0;KL2GvlyY<2;KL2GvlyY++){
      sz = 0;
      if(G[0] < G[1]){
        a[sz][0] = G[0];
        a[sz][1] = G[1];
        sz++;
      }
      if(S[0] < S[1]){
        a[sz][0] = S[0];
        a[sz][1] = S[1];
        sz++;
      }
      if(B[0] < B[1]){
        a[sz][0] = B[0];
        a[sz][1] = B[1];
        sz++;
      }
      if(sz==1){
        res = solve(res, a[0]);
      }
      if(sz==2){
        res = solve(res, a[0], a[1]);
      }
      swap(G[0], G[1]);
      swap(S[0], S[1]);
      swap(B[0], B[1]);
    }
  }
  wt_L(res);
  wt_L('\n');
  return 0;
}
// cLay varsion 20190609-2 [beta]

// --- original code ---
// int N, G[2], S[2], B[2];
// int dp[5001];
// 
// ll solve(ll N, int A[]){
//   return N + (N / A[0]) * (A[1] - A[0]);
// }
// 
// ll solve(ll N, int A[], int B[]){
//   ll i, j, k, res = 0;
// 
//   for(i=0;;i++){
//     k = N - A[0] * i;
//     if(k < 0) break;
//     j = k / B[0];
//     res >?= N + i * (A[1]-A[0]) + j * (B[1]-B[0]);
//   }
// 
//   return res;
// }
// 
// {
//   int i, j, k;
//   ll res;
//   int a[2][2], sz;
//   rd(N,(G,S,B)(2));
// 
//   if(G[0] >= G[1] && S[0] >= S[1] && B[0] >= B[1]){
//     swap(G[0], G[1]);
//     swap(S[0], S[1]);
//     swap(B[0], B[1]);
//   }
//   if(G[0] <= G[1] && S[0] <= S[1] && B[0] <= B[1]){
//     rep(i,N+1) dp[i] = i;
//     rep(i,G[0],N+1) dp[i] >?= dp[i-G[0]] + G[1];
//     rep(i,S[0],N+1) dp[i] >?= dp[i-S[0]] + S[1];
//     rep(i,B[0],N+1) dp[i] >?= dp[i-B[0]] + B[1];
//     res = dp[N];
//   } else {
//     res = N;
//     rep(2){
//       sz = 0;
//       if(G[0] < G[1]) a[sz][0] = G[0], a[sz][1] = G[1], sz++;
//       if(S[0] < S[1]) a[sz][0] = S[0], a[sz][1] = S[1], sz++;
//       if(B[0] < B[1]) a[sz][0] = B[0], a[sz][1] = B[1], sz++;
//       if(sz==1) res = solve(res, a[0]);
//       if(sz==2) res = solve(res, a[0], a[1]);
//       swap(G[0], G[1]);
//       swap(S[0], S[1]);
//       swap(B[0], B[1]);
//     }
//   }
//   wt(res);
// }


Measured memory_bytes: 256