/*#include "bits/stdc++.h"
//#include <string>
using namespace std;
#define REP(i, n) for(ll i = 0;i < n;i++)
#define ll long long
#define MOD 1000000007
using vi = vector<int>; // intの1次元の型に vi という別名をつける
using vvi = vector<vi>; // intの2次元の型に vvi という別名をつける

ll n,m;


//文字列スウチ比較
//s0<s1 なら-1,s0==s1なら0,s0<s1なら1
int mystrcmp(string s0,string s1){
  int sl0=s0.length();
  int sl1=s1.length();
  if (sl0<sl1){
	  return -1;
  }
  if (sl0>sl1){
	  return 1;
  }
  const char *c0=s0.c_str();
  const char *c1=s1.c_str();
  int rt=strcmp(c0,c1);
  return rt;
}


int main(){
  cin>>n>>m;
  vi a(m);
  int mtchn[10] ={0,2,5,5,4,5,6,3,7,6};
  REP(i,m){
    cin>>a[i];
  }
  //mtchn[a[i]]
  vector<string> dpst(10001);

  REP(i,n+1){
	  REP(j,m){
		  //a[j]//実際の数字
		  //mtchn[a[j]]//マッチ数
		  int idx=i-mtchn[a[j]];
		  if (idx>=0){
			  if ((dpst[idx].length()!=0)|(idx==0)){
				string stchk=dpst[idx]+to_string(a[j]);
				int ret=mystrcmp(dpst[i],stchk);
				if (ret==-1){
					dpst[i]=stchk;
				}
			  }
		  }
	  }
  }


	cout<<dpst[n]<<endl;
  return 0;
}




*/












#include <bits/stdc++.h>
using namespace std;
/*
void hikaku1(){
  if (flg==0){
    acnt[kihonid]-=i;
    acnt[P[0]-1]+=i;
  }else{//ちゃんと比較
    if ((P[0]-1)>kihonid){
      acnt[kihonid]-=i;
      acnt[P[0]-1]+=i;
    }
  }
}
 
 
void hikaku2(){
  if (flg==0){
    acnt[kihonid]-=i+j;
    acnt[P[0]-1]+=i;
    acnt[P[1]-1]+=j;
  }else{//ちゃんと比較
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt_dmy[l]=acnt[l];
    }
    acnt_dmy[kihonid]-=i+j;
    acnt_dmy[P[0]-1]+=i;
    acnt_dmy[P[1]-1]+=j;
    int lgf=0;
    for(int l=9;l>=0;l--){
      if (acnt_dmy[l]>acnt[l]){
        lgf=1;
        break;
      }
    }
    if (lgf==1){
      for(int l=0;l<9;l++){
        acnt[l]=acnt_dmy[l];
      }
    }
  }
}
 
void hikaku3(){
  if (flg==0){
    acnt[kihonid]-=i+j+k;
    acnt[P[0]-1]+=i;
    acnt[P[1]-1]+=j;
    acnt[P[2]-1]+=k;
  }else{//ちゃんと比較
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt_dmy[l]=acnt[l];
    }
    acnt_dmy[kihonid]-=i+j+k;
    acnt_dmy[P[0]-1]+=i;
    acnt_dmy[P[1]-1]+=j;
    acnt_dmy[P[2]-1]+=k;
    int lgf=0;
    for(int l=9;l>=0;l--){
      if (acnt_dmy[l]>acnt[l]){
        lgf=1;
        break;
      }
    }
    if (lgf==1){
      for(int l=0;l<9;l++){
        acnt[l]=acnt_dmy[l];
      }
    }
  }
}
*/
 
int main(){
  int N,M,a;
  cin>>N>>M;
  
  vector<int> recnum={2,5,5,4,5,6,3,7,6};
  vector<int> mccnt(M,0);//指定idのマッチの答え本数
  vector<int> mcnum(M,0);//指定idのマッチの本当の数字
  vector<int> mcrcn(M,0);//指定idのマッチの必要マッチ本数
  vector<int> mcmod(M,0);//指定idのマッチの置き換えに必要な本数記憶用
  
  vector<int> acnt(9,0);//1-9の答え本数
  
  int mcrcnmin=9;
  int mcrcnmin_id=0;
  for(int i=0;i<M;i++){
    cin>>a;
    mcnum[i]=a;
    mcrcn[i]=recnum[a-1];
    if (mcrcnmin>mcrcn[i]){
      mcrcnmin=mcrcn[i];
      mcrcnmin_id=i;
    }else{ 
      if (mcrcnmin==mcrcn[i]){
        if (mcnum[i]>mcnum[mcrcnmin_id]){
          mcrcnmin=mcrcn[i];
          mcrcnmin_id=i;
        }
      }
    }
  }
  
  //ここで一番必要本数が少ないやつで構成してみる
  mccnt[mcrcnmin_id]=N/mcrcn[mcrcnmin_id];
  int joyo=N%mcrcn[mcrcnmin_id];
  
  int kihonid=mcnum[mcrcnmin_id]-1;
  acnt[kihonid]=mccnt[mcrcnmin_id];
  
  
  //ここでjoyoが0になるような「置き換え方法」を考える
  for(int i=0;i<M;i++){
    mcmod[i]=mcrcn[i]-mcrcn[mcrcnmin_id];
    if (mcrcn[i]%mcrcn[mcrcnmin_id]==0){
      mcmod[i]=0;
    }
  }
  
  //何本必要なパターンがあるか
  vector<int> B(5,0);
  for(int i=0;i<M;i++){
    if (mcmod[i]!=0){
      B[mcmod[i]-1]=1;
    }
  }
  int C=0;
  for(int i=0;i<5;i++){
    if (B[i]!=0){
      C++;
    }
  }
  
  //ここでDに何本必要か、の本数が代入される
  vector<int> D(C,0);
  vector<int> P(C,0);
  C=0;
  for(int i=0;i<5;i++){
    if (B[i]!=0){
      D[C]=i+1;
      for(int j=0;j<M;j++){
        if (mcmod[j]==D[C]){
          if (mcnum[j]>P[C]){
            P[C]=mcnum[j];
          }
        }
      }
      C++;
    }
  }
  
  
  int E,G;
  
  
  
  
  
  
  
  
  /*
  for(int i=9;i>=0;i--){
    for(int H=0;H<acnt[i];H++){
      cout<<(i+1);
    }
  }
  cout<<endl;
  
  cout<<"joyo"<<joyo<<endl;
  cout<<"D[0]"<<D[0]<<endl;
  cout<<"D[1]"<<D[1]<<endl;
  cout<<"D[2]"<<D[2]<<endl;
  cout<<"P[0]"<<P[0]<<endl;
  cout<<"P[1]"<<P[1]<<endl;
  cout<<"P[2]"<<P[2]<<endl;
  */
  
  vector<int> acnt2(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt2[l]=acnt[l];
    }
  
  
for(int H=0;H<7;H++){
  E=mccnt[mcrcnmin_id];//置き換えれる最大本数
  G=min(E,6)+1;//計算で使う最大置き換え本数
  //cout<<"G"<<G<<endl;
  if (joyo==0)
    break;
  int sum=0;
  int flg=0;
  
  for(int i=0;i<G;i++){
    sum=D[0]*i;
    if (C==1){//1次元なら
      if (sum==joyo){
        //あとで比較！！！！！！！！！！！！！！！！！！！！！！！
        ///////////////////////////////////////
  if (flg==0){
    for(int l=0;l<9;l++){
      acnt2[l]=acnt[l];
    }
    acnt2[kihonid]-=i;
    acnt2[P[0]-1]+=i;
  }else{//ちゃんと比較
    
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt_dmy[l]=acnt[l];
    }
    acnt_dmy[kihonid]-=i;
    acnt_dmy[P[0]-1]+=i;
    int lgf=0;
    for(int l=9;l>=0;l--){
      if (acnt_dmy[l]>acnt2[l]){
        lgf=1;
        break;
      }else{
        if (acnt_dmy[l]<acnt2[l])break;
      }
    }
    if (lgf==1){
      for(int l=0;l<9;l++){
        acnt2[l]=acnt_dmy[l];
      }
    }
    
  }
        ////////////////////////////////////////
        flg++;
      }
    }else{//2,3次元なら
      for(int j=0;i+j<G;j++){
        sum=D[0]*i+D[1]*j;
        if (C==2){//2次元なら
          if (sum==joyo){
            //あとで比較！！！！！！！！！！！！！！！！！！！！！！！
            
  if (flg==0){
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt2[l]=acnt[l];
    }
    acnt2[kihonid]-=i+j;
    acnt2[P[0]-1]+=i;
    acnt2[P[1]-1]+=j;
  }else{//ちゃんと比較
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt_dmy[l]=acnt[l];
    }
    acnt_dmy[kihonid]-=i+j;
    acnt_dmy[P[0]-1]+=i;
    acnt_dmy[P[1]-1]+=j;
    int lgf=0;
    for(int l=9;l>=0;l--){
      if (acnt_dmy[l]>acnt2[l]){
        lgf=1;
        break;
      }else{
        if (acnt_dmy[l]<acnt2[l])break;
      }
    }
    if (lgf==1){
      for(int l=0;l<9;l++){
        acnt2[l]=acnt_dmy[l];
      }
    }
  }
            ///////////////////////////////////////////
            flg++;
          }
        }else{//3次元なら
          for(int k=0;i+j+k<G;k++){
            sum=D[0]*i+D[1]*j+D[2]*k;
            if (sum==joyo){
              //あとで比較！！！！！！！！！！！！！！！！！！！！！！！
              
  if (flg==0){
    for(int l=0;l<9;l++){
      acnt2[l]=acnt[l];
    }
    acnt2[kihonid]-=i+j+k;
    acnt2[P[0]-1]+=i;
    acnt2[P[1]-1]+=j;
    acnt2[P[2]-1]+=k;
  }else{//ちゃんと比較
    vector<int> acnt_dmy(9,0);//1-9の答え本数
    for(int l=0;l<9;l++){
      acnt_dmy[l]=acnt[l];
    }
    acnt_dmy[kihonid]-=i+j+k;
    acnt_dmy[P[0]-1]+=i;
    acnt_dmy[P[1]-1]+=j;
    acnt_dmy[P[2]-1]+=k;
    int lgf=0;
    for(int l=9;l>=0;l--){
      if (acnt_dmy[l]>acnt2[l]){
        lgf=1;
        break;
      }else{
        if (acnt_dmy[l]<acnt2[l])break;
      }
    }
    if (lgf==1){
      for(int l=0;l<9;l++){
        acnt2[l]=acnt_dmy[l];
      }
    }
  }
              /////////////////////////////////////////////////
              flg++;
            }
          }
        }
      }
    }
  }
  
  //cout<<"flg="<<flg<<endl;
  //ここでもしflgが1になっていなければ、joyoをうめるパターンが見つからなかったということ
  if (flg==0){
    joyo+=mcrcn[mcrcnmin_id];
    mccnt[mcrcnmin_id]--;
    acnt[kihonid]=mccnt[mcrcnmin_id];
    continue;
  }else{
    break;
  }
}
  
  
  
  
  
  for(int i=9;i>=0;i--){
    for(int H=0;H<acnt2[i];H++){
      cout<<(i+1);
    }
  }
  cout<<endl;
  
  return 0;
}

Measured memory_bytes: 256