#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int MX = 2e5 + 2;
const long long INF = 1000000000000000000;
const long double PI = 4 * atan((long double)1);
const int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
bool tkmin(int a, int b) { return b < a ? a = b, true : false; }
bool tkmax(int a, int b) { return b > a ? a = b, true : false; }
int rudiv(int a, int b) { return a / b + !(a % b == 0); }
void op(int ok) { cout << ok << endl; }
void op(string ok) { cout << ok << endl; }
void op(long long ok) { cout << ok << endl; }
void op(char ok) { cout << ok << endl; }
void op(double ok) { cout << fixed << setprecision(7) << ok << endl; }
void op(long double ok) { cout << fixed << setprecision(7) << ok << endl; }
void op(pair<int, int> ok) { cout << ok.first << " " << ok.second << endl; }
void op(pair<long long, long long> ok) {
  cout << ok.first << " " << ok.second << endl;
}
void op(pair<long double, long double> ok) {
  cout << ok.first << " " << ok.second << endl;
}
int n, m;
int a[2002];
int ans;
map<int, int> b;
int changes;
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  ;
  cin >> n >> m;
  changes = 0;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    b[a[i]]++;
  }
  ans = n / m;
  int bPointer = 1;
  for (int i = 0; i < n; i++) {
    while (b[bPointer] >= ans) bPointer++;
    if (bPointer > m) break;
    if (a[i] > m || b[a[i]] > ans) {
      b[a[i]]--;
      a[i] = bPointer;
      b[a[i]]++;
      changes++;
    }
  }
  cout << ans << " " << changes << endl;
  for (int i = 0; i < n; i++) {
    cout << a[i] << " ";
  }
  return 0;
}
