#include <bits/stdc++.h>
using namespace std;
int islem[10], bekle[10];
int k, n1, n2, n3, t1, t2, t3, ans;
priority_queue<pair<int, pair<int, int> > > Q;
int main() {
  scanf("%d %d %d %d %d %d %d", &k, &n1, &n2, &n3, &t1, &t2, &t3);
  bekle[0] = k;
  int send = min(bekle[0], n1);
  islem[1] += send;
  bekle[0] -= send;
  Q.push(make_pair(-t1, make_pair(1, send)));
  while (!Q.empty()) {
    int send;
    pair<int, pair<int, int> > x = Q.top();
    Q.pop();
    if (x.second.first == 1) {
      islem[1] -= x.second.second;
      bekle[1] += x.second.second;
      send = min(n1 - islem[1], bekle[0]);
      if (send) {
        islem[1] += send;
        bekle[0] -= send;
        Q.push(make_pair(x.first - t1, make_pair(1, send)));
      }
      send = min(n2 - islem[2], bekle[1]);
      if (send) {
        islem[2] += send;
        bekle[1] -= send;
        Q.push(make_pair(x.first - t2, make_pair(2, send)));
      }
    }
    if (x.second.first == 2) {
      islem[2] -= x.second.second;
      bekle[2] += x.second.second;
      send = min(n2 - islem[2], bekle[1]);
      if (send) {
        islem[2] += send;
        bekle[1] -= send;
        Q.push(make_pair(x.first - t2, make_pair(2, send)));
      }
      send = min(n3 - islem[3], bekle[2]);
      if (send) {
        islem[3] += send;
        bekle[2] -= send;
        Q.push(make_pair(x.first - t3, make_pair(3, send)));
      }
    }
    if (x.second.first == 3) {
      islem[3] -= x.second.second;
      int send = min(n3 - islem[3], bekle[2]);
      if (send) {
        islem[3] += send;
        bekle[2] -= send;
        Q.push(make_pair(x.first - t3, make_pair(3, send)));
      }
      ans = max(-x.first, ans);
    }
  }
  printf("%d", ans);
}
