#include <bits/stdc++.h>
using namespace std;

int main() {

  int N, M;
  cin >> N >> M;

  vector<int> A(M);
  for (int i = 0; i < M; i++) {
    cin >> A[i];
  }

  // 昇順で確認する必要がある
  sort(A.begin(), A.end());

  vector<int> p = {0, 2, 5, 5, 4, 5, 6, 3, 7, 6};

  // マッチをi本使ったときの桁数の最大値
  // 初期値は-1で埋めておく
  // 要素数は N + 7 (pの最大値) + α
  vector<int> dp(N+10, -1);

  dp[0] = 0;

  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      int k = p[A[j]];
      dp[i + k] = max(dp[i + k], dp[i] + 1);
    }
  }

  // 残りのマッチの本数
  int remain = N;

  while (0 < remain) {

    // 答え
    int answer = 0;

    // 使うマッチの本数
    int use = 0;
    
    for (int i = 0; i < M; i++) {

      // 使いたいマッチの本数
      int k = p[A[i]];
      
      // マッチが使える場合
      if (k <= remain) {
      
        // kを使った後の残ったマッチの本数でも桁数が最大値が作れる場合はOK
        if (dp[remain - k] == dp[remain] - 1) {
          // OK場合でもMはできる限り大きい数にする
          answer = A[i];
          use = k;
        }

      }

    }

    // マッチの数を減らす
    remain -= use;

    cout << answer;
  
  }

  cout << endl;

  return 0;

}
#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < n; ++i)
#define ll long long
#define P pair<int,int>
#define fast_io ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int MOD = 1000000007;
const int INF = 2002002002;
const ll LLINF = 9009009009009009009;
using namespace std;

int main() {
    fast_io
    int n, t;
    cin >> n >> t;
    vector<P> ti_ta(n);
    rep(i,n) cin >> ti_ta[i].first >> ti_ta[i].second;
    sort(ti_ta.begin(), ti_ta.end());

    vector<vector<int>> dp(n, vector<int>(t+1, 0));
    rep(i,t+1) {
        if (i >= ti_ta[0].first) dp[0][i] = ti_ta[0].second;
    }

    int ans = 0;
    rep(i,n) {
        rep(ti,t+1) {
            if(i == n-1) break;
            // i+1番目の食べ物を食べるときにi番目までの食べ物を食べるのにかかる時間
            int nti = ti - ti_ta[i+1].first;
            // もしi+1番目の食べ物を食べると制限時間内に食べ終わらないとき
            if (nti < 0) dp[i+1][ti] = dp[i][ti];
            // もしi+1番目の食べ物を食べないほうがいいときor食べたほうがいいとき
            else dp[i+1][ti] = max(dp[i][ti], dp[i][nti] + ti_ta[i+1].second);
        }
        int ans_tmp;
        if (i == 0) ans_tmp = ti_ta[0].second;
        else ans_tmp = dp[i-1][t-1] + ti_ta[i].second;
        ans = max(ans, ans_tmp);
    }
    cout << ans << endl;
    return 0;
}