from heapq import heappush, heappop def factorial(n, MOD): F = [1] for i in range(1, n+1): F.append(F[-1]*i%MOD) return F INF = 1<<60 N, A, B, C = map(int, input().split()) base = A*N F = factorial(N, N) start = INF p = 1 for i in range(1, N+1): p *= i if N <= p: start = i break visited = [False]*N dist = [INF]*N dist[1] = 0 que = [(0, 1)] while que: _, n = heappop(que) if visited[n]: continue visited[n] = True if dist[n]+A < dist[(n+1)%N]: dist[(n+1)%N] = dist[n]+A heappush(que, (dist[(n+1)%N], (n+1)%N)) v = n cost = B flag = False while cost <= base: if dist[n]+cost < dist[v]: dist[v] = dist[n]+cost heappush(que, (dist[v], v)) if flag and dist[n]+cost+C < dist[0]: dist[0] = dist[n]+cost+C heappush(que, (dist[0], 0)) v *= n if N <= v: flag = True v %= N cost *= B if dist[n]+C < dist[F[n]]: dist[F[n]] = dist[n]+C heappush(que, (dist[F[n]], F[n])) if start <= n and dist[n]+C+C < dist[0]: dist[0] = dist[n]+C+C heappush(que, (dist[F[n]], 0)) print(dist[0])