#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; }