#include <bits/stdc++.h>
using namespace std;
vector<int> a;
vector<int> pos[2007];
int b[2007];
multiset<pair<int, int> > mt;
void solve() {
  int n, m;
  scanf("%d%d", &n, &m);
  a.resize(n);
  int ans1 = n / m, ans2 = 0;
  for (int(i) = 0; (i) < (n); ++(i)) {
    scanf("%d", &a[i]);
    if (a[i] <= m) {
      pos[a[i]].push_back(i);
      ++b[a[i]];
    }
  }
  for (int i = 1; i <= m; ++i) mt.insert({b[i], i});
  for (int(i) = 0; (i) < (n); ++(i)) {
    if (a[i] > m) {
      pair<int, int> p = *mt.begin();
      mt.erase(p);
      if (p.first >= ans1) break;
      a[i] = p.second;
      ++ans2;
      mt.insert({p.first + 1, p.second});
    }
  }
  while (mt.rbegin()->first > ans1 && mt.begin()->first < ans1) {
    pair<int, int> p1 = *mt.begin(), p2 = *mt.rbegin();
    mt.erase(p1);
    mt.erase(p2);
    ++p1.first;
    --p2.first;
    a[pos[p2.second].back()] = p1.second;
    pos[p2.second].pop_back();
    ++ans2;
    mt.insert(p1);
    mt.insert(p2);
  }
  printf("%d %d\n", ans1, ans2);
  for (int& i : a) printf("%d ", i);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  solve();
  return 0;
}
