#include #include #include #include #include using namespace std; #define NMAX 1005 int n, m; pair > c[NMAX*NMAX]; int a[NMAX], b[NMAX]; int usedA[NMAX], usedB[NMAX]; int k = 0; set 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 > 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; }