n,m=map(int,input().split())
x=[2,5,5,4,5,6,3,7,6]
a=[]
for i in map(int,input().split()):
    a.append([i,x[i-1]])
a.sort(reverse=True)
dp=[0]*(n+1)
for i in range(m):
    for j in range(n+1):
        if j==0 or dp[j]!=0:
            if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0])
print(dp[n])
'''
dp[i]をちょうどi本使った時に表せる最大の数と考えれば
(aが数字の値で降順ソートされていることにも注意して)、
a[i][0]をi番目に大きい数字、a[i][1]をその数を表すのに
必要なマッチ棒の本数として、
dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0])
という更新を行ってdp[n]を求めれば良いです。
また、ある数字の組が決まればマッチの本数が一意に定まり
一番上の桁から順に大きい数字を入れるのが最適なので、
aを降順ソートして大きい数字から順に取ってDPを行うことで
これを実現することができます。
e.g. 9→3→3→2の順番に取れば、
((((0×10+9)×10+3)×10+3)×10+2)=9332((((0×10+9)×10+3)×10+3)×10+2)=9332
''' n,m=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m x=[2,5,5,4,5,6,3,7,6] x [2,5,5,4,5,6,3,7,6] 2 5 5 4 5 6 3 7 6 a=[] a [] for i in map(int,input().split()):
    a.append([i,x[i-1]]) i map(int,input().split()) map int input().split() ().split () input split a.append([i,x[i-1]]) a.append a append [i,x[i-1]] i x[i-1] x i-1 i 1 a.sort(reverse=True) a.sort a sort reverse=True reverse True dp=[0]*(n+1) dp [0]*(n+1) [0] 0 n+1 n 1 for i in range(m):
    for j in range(n+1):
        if j==0 or dp[j]!=0:
            if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0]) i range(m) range m for j in range(n+1):
        if j==0 or dp[j]!=0:
            if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0]) j range(n+1) range n+1 n 1 if j==0 or dp[j]!=0:
            if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0]) j==0 or dp[j]!=0 j==0 j 0 dp[j]!=0 dp[j] dp j 0 if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0]) j+a[i][1]<=n j+a[i][1] j a[i][1] [i] a i 1 n dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0]) dp[j+a[i][1]] dp j+a[i][1] j a[i][1] [i] a i 1 max(dp[j+a[i][1]],dp[j]*10+a[i][0]) max dp[j+a[i][1]] dp j+a[i][1] j a[i][1] [i] a i 1 dp[j]*10+a[i][0] dp[j]*10 dp[j] dp j 10 a[i][0] [i] a i 0 print(dp[n]) print dp[n] dp n '''
dp[i]をちょうどi本使った時に表せる最大の数と考えれば
(aが数字の値で降順ソートされていることにも注意して)、
a[i][0]をi番目に大きい数字、a[i][1]をその数を表すのに
必要なマッチ棒の本数として、
dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0])
という更新を行ってdp[n]を求めれば良いです。
また、ある数字の組が決まればマッチの本数が一意に定まり
一番上の桁から順に大きい数字を入れるのが最適なので、
aを降順ソートして大きい数字から順に取ってDPを行うことで
これを実現することができます。
e.g. 9→3→3→2の順番に取れば、
((((0×10+9)×10+3)×10+3)×10+2)=9332((((0×10+9)×10+3)×10+3)×10+2)=9332
''' a=[] [] a x=[2,5,5,4,5,6,3,7,6] [2,5,5,4,5,6,3,7,6] x n,m=map(int,input().split()) map(int,input().split()) n m=map(int,input().split()) map(int,input().split()) m dp=[0]*(n+1) [0]*(n+1) dp
n,m=map(int,input().split())
x=[2,5,5,4,5,6,3,7,6]
a=[]
for i in map(int,input().split()):
    a.append([i,x[i-1]])
a.sort(reverse=True)
dp=[0]*(n+1)
for i in range(m):
    for j in range(n+1):
        if j==0 or dp[j]!=0:
            if j+a[i][1]<=n:
                dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0])
print(dp[n])
'''
dp[i]をちょうどi本使った時に表せる最大の数と考えれば
(aが数字の値で降順ソートされていることにも注意して)、
a[i][0]をi番目に大きい数字、a[i][1]をその数を表すのに
必要なマッチ棒の本数として、
dp[j+a[i][1]]=max(dp[j+a[i][1]],dp[j]*10+a[i][0])
という更新を行ってdp[n]を求めれば良いです。
また、ある数字の組が決まればマッチの本数が一意に定まり
一番上の桁から順に大きい数字を入れるのが最適なので、
aを降順ソートして大きい数字から順に取ってDPを行うことで
これを実現することができます。
e.g. 9→3→3→2の順番に取れば、
((((0×10+9)×10+3)×10+3)×10+2)=9332((((0×10+9)×10+3)×10+3)×10+2)=9332
'''