#include <cstdio>
#include <iostream>
#include <algorithm>
#include <tr1/unordered_map>

using namespace std;
using namespace std::tr1;

#define MAX_N 1000

struct numbers {
  int val, pos;
};

numbers a[MAX_N], b[MAX_N];
unordered_map< int, bool > h;

void read( int &n, int &m ) {
  scanf( "%d%d", &n, &m );
  for ( int i = 0; i < n; ++i ) {
    scanf( "%d", &a[i].val );
    a[i].pos = i;
  }
  for ( int i = 0; i < m; ++i ) {
    scanf( "%d", &b[i].val );
    b[i].pos = i;
  }
  
  b[m].val = 0;
  b[m].pos = m;
  ++m;
}

inline bool cmp1( numbers x, numbers y ) {
  return x.val < y.val;
}

inline bool cmp2( numbers x, numbers y ) {
  return x.pos < y.pos;
}

int main() {
  int n, m;
  read( n, m );

  sort( a, a + n, cmp1 );
  sort( b, b + m, cmp1 );
  
  int count = 0;
  for ( int i = n - 1; i >= 0; --i )
    for ( int j = 0; j < m; ++j ) {
      int this_val = a[i].val - b[j].val;
      if ( h.find( this_val ) == h.end() ) {
        ++count;
        h[this_val] = true;

        a[i].val -= b[j].val;

        break;
      }
    }

  printf( "%d\n", count );
  sort( a, a + n, cmp2 );
  for ( int i = 0; i < n; ++i )
    printf( "%d ", a[i] );
}