#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000;
int n, k;
bool digits[16][8];
int can[MAXN + 5][MAXN + 5];
string scoreboard[MAXN + 5];
void precompute() {
  digits[0][0] = true;
  digits[0][1] = true;
  digits[0][2] = true;
  digits[0][3] = false;
  digits[0][4] = true;
  digits[0][5] = true;
  digits[0][6] = true;
  digits[1][0] = false;
  digits[1][1] = false;
  digits[1][2] = true;
  digits[1][3] = false;
  digits[1][4] = false;
  digits[1][5] = true;
  digits[1][6] = false;
  digits[2][0] = true;
  digits[2][1] = false;
  digits[2][2] = true;
  digits[2][3] = true;
  digits[2][4] = true;
  digits[2][5] = false;
  digits[2][6] = true;
  digits[3][0] = true;
  digits[3][1] = false;
  digits[3][2] = true;
  digits[3][3] = true;
  digits[3][4] = false;
  digits[3][5] = true;
  digits[3][6] = true;
  digits[4][0] = false;
  digits[4][1] = true;
  digits[4][2] = true;
  digits[4][3] = true;
  digits[4][4] = false;
  digits[4][5] = true;
  digits[4][6] = false;
  digits[5][0] = true;
  digits[5][1] = true;
  digits[5][2] = false;
  digits[5][3] = true;
  digits[5][4] = false;
  digits[5][5] = true;
  digits[5][6] = true;
  digits[6][0] = true;
  digits[6][1] = true;
  digits[6][2] = false;
  digits[6][3] = true;
  digits[6][4] = true;
  digits[6][5] = true;
  digits[6][6] = true;
  digits[7][0] = true;
  digits[7][1] = false;
  digits[7][2] = true;
  digits[7][3] = false;
  digits[7][4] = false;
  digits[7][5] = true;
  digits[7][6] = false;
  digits[8][0] = true;
  digits[8][1] = true;
  digits[8][2] = true;
  digits[8][3] = true;
  digits[8][4] = true;
  digits[8][5] = true;
  digits[8][6] = true;
  digits[9][0] = true;
  digits[9][1] = true;
  digits[9][2] = true;
  digits[9][3] = true;
  digits[9][4] = false;
  digits[9][5] = true;
  digits[9][6] = true;
}
int needed(int position, int digit) {
  int counter = 0;
  for (int i = 0; i < 7; ++i) {
    if (scoreboard[position][i] - '0' != digits[digit][i]) {
      if (digits[digit][i] == 0) return k + 1;
      counter++;
    }
  }
  return counter;
}
bool fill(int position, int broken) {
  if (broken < 0) return false;
  if (position > n) return (broken == 0);
  if (can[position][broken] != -1) return can[position][broken];
  for (int i = 0; i <= 9; ++i) {
    if (fill(position + 1, broken - needed(position, i))) {
      can[position][broken] = 1;
      return true;
    }
  }
  can[position][broken] = 0;
  return false;
}
int main() {
  ios ::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  precompute();
  cin >> n >> k;
  for (int i = 1; i <= n; ++i) {
    cin >> scoreboard[i];
  }
  memset(can, -1, sizeof(can));
  if (!fill(1, k)) {
    cout << -1 << '\n';
    return 0;
  }
  int broken = k;
  for (int i = 1; i <= n; ++i) {
    for (int j = 9; j >= 0; --j) {
      if (fill(i + 1, broken - needed(i, j))) {
        cout << j;
        broken -= needed(i, j);
        break;
      }
    }
  }
  cout << '\n';
  return 0;
}
