#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>
using namespace std;

#define rep(i, s) for (int i = 0; i < s; ++i)
#define all(v) (v.begin(), v.end())
#define COUT(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl
#define EACH(i, s) for (__typeof__((s).begin()) i = (s).begin(); i != (s).end(); ++i)
#define VEC(a, n) vector<int>a(n)
#define PQ(a) priority_queue<int>a
#define PQmin(a) priority_queue< int, :vector<int>, greater<int> >a
#define PAIR pair<int, int>
/*
sort(sp.begin(), sp.end(), [](PAIR l, PAIR r){
        return l.first<r.first || (l.first==r.first && l.second > r.second);
        });
*/

typedef long long  ll;

#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))

int main() {
    ll n;
    ll ga,gb,sa,sb,ba,bb;
    cin>>n;
    cin>>ga>>sa>>ba;
    cin>>gb>>sb>>bb;
    //なぜ下のやり方ではダメか->これでは例えば利益率はめっちゃいいけど、金一枚買うのにどんぐり5000枚必要とかだったら損失がでかすぎる。なので、その損失を考えるためにdpを使う必要がある。

    //N個のどんぐりを配るまでの途中i個までで最大何個のドングリを増やせるかについてdpで持っておく。
    ll dp[n+1];
    for(int i=0;i<n+1;i++){
        dp[i]=n;
    }
    for(int i=n;i>=0;i--){
        if(i-ga>=0){dp[i-ga]=max(dp[i-ga],dp[i]-ga+gb);}
        if(i-sa>=0){dp[i-sa]=max(dp[i-sa],dp[i]-sa+sb);}
        if(i-ba>=0){dp[i-ba]=max(dp[i-ba],dp[i]-ba+bb);}
    }
    // for(int i=0;i<n+1;i++){
    //     cout<<dp[i]<<endl;
    // }
    // cout<<dp[0]<<endl;
    ll dp_[dp[0]+1];
    for(int i=0;i<dp[0]+1;i++){
        dp_[i]=dp[0];
    }
    // cout<<dp[0]<<endl;
    for(int i=dp[0];i>=0;i--){
        if(i-gb>=0){dp_[i-gb]=max(dp_[i-gb],dp_[i]-gb+ga);}
        if(i-sb>=0){dp_[i-sb]=max(dp_[i-sb],dp_[i]-sb+sa);}
        if(i-bb>=0){dp_[i-bb]=max(dp_[i-bb],dp_[i]-bb+ba);}
    }
    cout<<dp_[0]<<endl;

    // ll a = 1;
    // ll x=n,y=n,z=n;//どんぐりの数
    // ll cnt_x=0,cnt_y=0,cnt_z=0;//硬貨の数
    // for(int i=0;i<n;i++){
    //     if((x-ga)>=0){
    //         cnt_x++;
    //         x-=ga;
    //     }
    //     if((y-sa)>=0){
    //         cnt_y++;
    //         y-=sa;
    //     }
    //     if((z-ba)>=0){
    //         cnt_z++;
    //         z-=ba;
    //     }
    // }
    // for(int i=0;i<n;i++){
    //     if((cnt_x-1)>=0){
    //         cnt_x--;
    //         x+=gb;
    //     }
    //     if((cnt_y-1)>=0){
    //         cnt_y--;
    //         y+=sb;
    //     }
    //     if((cnt_z-1)>=0){
    //         cnt_z--;
    //         z+=bb;
    //     }
    // }
    // // cout<<x<<endl;
    // // cout<<y<<endl;
    // // cout<<z<<endl;
    // // cout<<n<<endl;
    // n=max(max(max(x,y),z),n);
    // // cout<<"AAA"<<endl;
    // x,y,z=n;//どんぐりの数
    // cnt_x,cnt_y,cnt_z=0;//硬貨の数
    // // cout<<n<<endl;
    // for(int i=0;i<n;i++){
    //     if((x-gb)>=0){
    //         cnt_x++;
    //         x-=gb;
    //     }
    //     if((y-sb)>=0){
    //         cnt_y++;
    //         y-=sb;
    //     }
    //     if((z-bb)>=0){
    //         cnt_z++;
    //         z-=bb;
    //     }
    // }
    // // cout<<"AAA"<<endl;
    // for(int i=0;i<n;i++){
    //     if((cnt_x-1)>=0){
    //         cnt_x--;
    //         x+=ga;
    //     }
    //     if((cnt_y-1)>=0){
    //         cnt_y--;
    //         y+=sa;
    //     }
    //     if((cnt_z-1)>=0){
    //         cnt_z--;
    //         z+=ba;
    //     }
    // }
    // n=max(max(max(x,y),z),n);
    // cout<<n<<endl;


    return 0;
}


Measured memory_bytes: 195584