#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#define NMAX 1005
#define MOD 666013
#define INF 0x3f3f3f3f
#define pb push_back

using namespace std;

typedef pair<int, int> pii;

//ifstream fin("zlego.in");
//ofstream fout("zlego.out");

set<int> mySet;
int a[NMAX],b[NMAX],poz[NMAX];

bool comp(int i, int j) {
	return a[i]<a[j];
}

int main() {
	int n,m,i,j,unde,minv,lastminv;

	cin>>n>>m;
	for(i=0;i<n;++i) {
		cin>>a[i];
		poz[i]=i;
	}
	for(i=0;i<m;++i) cin>>b[i];

	sort(poz,poz+n,comp);

	b[m++]=0;
	lastminv=-INF;
	for(i=0;i<n;++i) {
		unde=poz[i];
		minv=INF;
		for(j=0;j<m;++j)
			if(a[unde] - b[j] > lastminv)
				minv=min(minv, a[unde] - b[j]);

		if(minv == INF) minv=lastminv;

		a[unde]=lastminv=minv;
		mySet.insert(minv);
	}

	cout<<mySet.size()<<'\n';
	for(i=0;i<n;++i)
		cout<<a[i]<<' ';

	return 0;
}