## https://yukicoder.me/problems/no/1375 def main(): N, X, Y = map(int, input().split()) A = list(map(int, input().split())) dp = [-1] * 4 dp[0] = 0 answers = [0] * N for i in range(N): a = A[i] new_dp = dp.copy() # 0 から if dp[0] >= 0: new_dp[0] = max(new_dp[0], dp[0] + a) new_dp[1] = max(new_dp[1], dp[0] + X) # 1 から if dp[1] >= 0: new_dp[1] = max(new_dp[1], dp[1] + X) new_dp[2] = max(new_dp[2], dp[1] + a) new_dp[3] = max(new_dp[3], dp[1]) if dp[2] >= 0: new_dp[2] = max(new_dp[2], dp[2] + a) new_dp[3] = max(new_dp[3], dp[2]) dp = new_dp answers[i] = dp[3] dp = [-1] * 5 dp[0] = 0 answers2 = [0] * N for i in reversed(range(N)): a = A[i] new_dp = dp.copy() # 0 から if dp[0] >= 0: new_dp[0] = max(new_dp[0], dp[0] + a) new_dp[1] = max(new_dp[1], dp[0] + Y) # 1 から if dp[1] >= 0: new_dp[1] = max(new_dp[1], dp[1] + Y) new_dp[2] = max(new_dp[2], dp[1] + a) new_dp[3] = max(new_dp[3], dp[1]) if dp[2] >= 0: new_dp[2] = max(new_dp[2], dp[2] + a) new_dp[3] = max(new_dp[3], dp[2]) dp = new_dp answers2[i] = dp[3] for i in range(1, N - 1): ans = answers[i] + answers2[i] + A[i] print(ans) if __name__ == "__main__": main()