object Main {

  def main(args: Array[String]): Unit = {
    val sc = new java.util.Scanner(System.in)

    val N = sc.nextInt()
    val gA, sA, bA = sc.nextInt()
    val gB, sB, bB = sc.nextInt()

    // 各所, 基本は
    // ドングリが少ない量で金属が受け取れ,
    // 金属に対して多い量でドングリが受け取れるようにすればいい.
    //   金属=>ドングリなので, 金属=>ドングリ=>金属は無価値
    //   A => B => Aなので, Aで交換したものをAで交換することは等価交換になり無意味
    //   つまり, A で交換したものを B で交換するか,
    //          B で交換したものを A で交換するか, のどちらか, もしくは両方を選択する.
    //   各交換フェーズは独立しており, A で交換したものを B で交換する というのは, 最終的なドングリは再度 金属に交換できる.
    // 最初のAで金属に交換する可能性,
    //   gB,sB,bBのうち, どれか一つが, gA,sA,bAよりも大きい時には, 交換のメリットがある
    //   もし, gA < gB,sA < sB,bA < bBの場合には, 最初に交換すると損なので, 次で交換する
    // 次のBでドングリに交換する可能性,
    //   このタイミングでドングリに交換しないと価値は上がらない. 全て交換する
    // Bで金属に交換する可能性,
    //   最初のAと逆になる
    // 次のAで金属を全てドングリに交換する.

    val diffMaxBA = Seq(((gA, gB), gB - gA), ((sA, sB), sB - sA), ((bA, bB), bB - bA)).maxBy(_._2)
    val diffMaxAB = Seq(((gB, gA), gA - gB), ((sB, sA), sA - sB), ((bB, bA), bA - bB)).maxBy(_._2)

    var dongri = N
    if (diffMaxBA._2 > 0)
      dongri = (dongri % diffMaxBA._1._1) + (dongri / diffMaxBA._1._1) * diffMaxBA._1._2
    if (diffMaxAB._2 > 0)
      dongri = (dongri % diffMaxAB._1._1) + (dongri / diffMaxBA._1._1) * diffMaxBA._1._2
    println(dongri)
  }

}