#include <iostream>
#include <set>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

#define NMAX 1005

int n, m;
pair<int, pair< int, int> > c[NMAX*NMAX];
int a[NMAX], b[NMAX];
int usedA[NMAX], usedB[NMAX];
int k = 0;
set<int> Set;

int main()
{
    cin >> n >> m;
    for ( int i = 1; i <= n; i++ ) {
        cin >> a[i];
    }
    for ( int i = 1; i <= m; i++ ) {
        cin >> b[i];
    }

    for ( int i = 1; i <= n; i++ ) {
        for ( int j = 0; j <= m; j++ ) {
            c[++k] = make_pair(a[i] - b[j], make_pair(i, j));
        }
    }

    int solT = 0;
    vector<pair<int, int> > sol;
    sort(c+1, c+k+1);
    for ( int i = 1; i <= k; i++ ) {
        if (Set.find(c[i].first) == Set.end() && !usedA[c[i].second.first] && !usedB[c[i].second.second] ) {
            solT++;
            sol.push_back(c[i].second);
            Set.insert(c[i].first);
            usedA[c[i].second.first] = 1;
            usedB[c[i].second.second] = 1;
        }
    }

    for ( int i = 0; i < sol.size(); i++ ) {
        a[sol[i].first] -= b[sol[i].second];
    }

    cout << solT;
    for ( int i = 1; i <= n; i++) {
        cout << a[i] << ' ';
    }
    cout << '\n';
    return 0;
}