# -*- coding: utf-8 -*- def solve(N, total, A): MAX = (1 << N + 2) dp = [MAX] * (total + 1) # 結果をビットで保存するDP dp[A[0]] = 0 for i, a in enumerate(A[1:]): for v in xrange(total, 0, -1): if dp[v] == MAX: continue current = dp[v] # 1倍の時に上書きされてしまう対策 mul_change = False if v * a <= total: if i == 0: dp[v * a] = (1 << ((N - 2) - i)) mul_change = True else: if a == 1: mul_change = True dp[v * a] = current | (1 << ((N - 2) - i)) else: dp[v * a] = min(dp[v * a], current | (1 << ((N - 2) - i))) if v + a <= total: if i == 0: dp[v + a] = 0 else: dp[v + a] = min(dp[v + a], current) if not mul_change: # 1倍の時以外はMAXにする。 # 1倍の時にすると値が消えてしまう。 dp[v] = MAX ans_bit = dp[total] if ans_bit == MAX: return None ans = "" while N > 1: ans = ("*" if ans_bit & 1 else "+") + ans ans_bit >>= 1 N -= 1 return ans N = int(raw_input()) total = int(raw_input()) A = map(int, raw_input().split(" ")) print solve(N, total, A)