#include <bits/stdc++.h>
class in {
  struct my_iterator {
    int it;
    const bool rev;
    explicit constexpr my_iterator(int it_, bool rev = false)
        : it(it_), rev(rev) {}
    int operator*() { return it; }
    bool operator!=(my_iterator& r) { return it != r.it; }
    void operator++() { rev ? --it : ++it; }
  };
  const my_iterator i, n;

 public:
  explicit constexpr in(int n) : i(0), n(n) {}
  explicit constexpr in(int i, int n) : i(i, n < i), n(n) {}
  const my_iterator& begin() { return i; }
  const my_iterator& end() { return n; }
};
using namespace std;
using i64 = long long;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int N, M;
  cin >> N >> M;
  vector<int> a(N);
  for (int& x : a) {
    cin >> x;
    --x;
  }
  vector<int> bucket(M, 0);
  for (int x : a) {
    if (x < M) bucket[x]++;
  }
  int ans = N / M;
  int cnt = 0;
  for (int i : in(M)) {
    while (bucket[i] < ans) {
      for (int j : in(N))
        if (a[j] >= M || bucket[a[j]] > ans) {
          if (a[j] < M) --bucket[a[j]];
          ++bucket[i];
          a[j] = i;
          cnt++;
          break;
        }
    }
  }
  cout << ans << ' ' << cnt << endl;
  for (int x : a) cout << x + 1 << ' ';
  cout << endl;
  return 0;
}
