INF = 10 ** 27 + 1
def solve(N, A, B, C, D):
to_visit = [-N]
cost = {N: 0}
def put(n, c):
cost[n] = min(cost.get(n, INF), c)
heappush(to_visit, -n)
visited = N + 1
while to_visit:
n = -heappop(to_visit)
if n == visited:
continue
visited = n
c = cost[n]
put(0, c + n * D)
if n % 2 == 0:
put(n // 2, c + A)
else:
put((n+1) // 2, c + A + D)
put((n-1) // 2, c + A + D)
if n % 3 == 0:
put(n // 3, c + B)
elif n % 3 == 1:
put((n-1) // 3, c + B + D)
put((n+2) // 3, c + B + D * 2)
else:
put((n+1) // 3, c + B + D)
put((n-2) // 3, c + B + D * 2)
if n % 5 == 0:
put(n // 5, c + C)
elif n % 5 == 1:
put((n-1) // 5, c + C + D)
put((n+4) // 5, c + C + D * 4)
elif n % 5 == 2:
put((n-2) // 5, c + C + D * 2)
put((n+3) // 5, c + C + D * 3)
elif n % 5 == 3:
put((n+2) // 5, c + C + D * 2)
put((n-3) // 5, c + C + D * 3)
elif n % 5 == 4:
put((n+1) // 5, c + C + D)
put((n-4) // 5, c + C + D * 4)
return cost[0]