#include <iostream>
#include <map>
#include <vector>
#include <bitset>
#include <cstdio>
#define DN 505
using namespace std;

typedef vector<int>::iterator it;

int n,m,v[DN],w[DN],fw[DN],cl,cr,lft[DN],rgt[DN],r;
map<int,int> nr;
vector<int> gr[DN*DN];
bitset<DN*DN> viz;

void ins(int v,map<int,int> &mp,int &cnt,int rev[]) {
	if(mp.find(v)==mp.end()) {
		mp[v]=++cnt;
		rev[cnt]=v;
	}
}

int c(int s) {
	if(viz[s]) return 0;
	viz[s]=1;
	for(it i=gr[s].begin(); i!=gr[s].end(); ++i) if(!lft[*i]) {
		lft[*i]=s;
		rgt[s]=*i;
		return 1;
	}
	for(it i=gr[s].begin(); i!=gr[s].end(); ++i) if(c(lft[*i])) {
		lft[*i]=s;
		rgt[s]=*i;
		return 1;
	}
	return 0;
}

int main() {
	freopen("input.txt","r",stdin);
	cin>>n>>m;
	for(int i=1; i<=n; ++i) cin>>v[i];
	for(int i=1; i<=m; ++i) cin>>w[i];
	for(int i=1; i<=n; ++i) {
		for(int j=0; j<=m; ++j) {
			ins(v[i]-w[j],nr,cr,fw);
			gr[i].push_back(nr[v[i]-w[j]]);
		}
	}
	for(int ok=1;ok;) {
		ok=0; viz&=0;
		for(int i=1; i<=n; ++i) if(!rgt[i])
			ok|=c(i);
	}
	for(int i=1; i<=n; ++i) r+=rgt[i]>0;
	cout<<r<<'\n';
	for(int i=1; i<=n; ++i) 
		if(rgt[i]) cout<<fw[rgt[i]]<<' ';
		else cout<<v[i]<<' ';
}