import heapq N,a,b,c = map(int,input().split()) C = {} x = N for i in range(2,N+1): if i*i>N:break while x%i==0: x //=i C[i] = C.get(i,0)+1 if x>1: C[x] = C.get(x,0)+1 n = 0 for p in C: n = max(n,pow(p,C[p])) K = 0 while b**K<=N*a: K += 1 A = list(range(N)) A[0] = 1 A[1] = 1 for i in range(2,N): A[i] = (A[i-1]*i)%N G = {i:[((i+1)%N,a)] for i in range(N+2)} G[N+1].append((0,c)) for i in range(2,N): for k in range(2,K+1): m = pow(i,k) m1 = m%N G[i].append((m1,b**k)) if m>=n: G[i].append((N+1,b**k)) for i in range(2,N): G[i].append((A[i],c)) prod = 1 for j in range(2,i+1): prod *= j if prod>=n: G[i].append((N+1,c)) break for i in range(n,N): G[i].append((0,c)) INFTY = 5*10**10 dist = [INFTY]*(N+2) dist[1] = 0 que = [(0,1)] while que: d,x = heapq.heappop(que) if dist[x]d+c: dist[y] = d+c heapq.heappush(que,(dist[y],y)) print(dist[0])