source_code: 
  import java.io.BufferedInputStream;
  import java.io.BufferedWriter;
  import java.io.OutputStreamWriter;
  import java.io.PrintWriter;
  import java.util.Map.Entry;
  import java.util.Scanner;
  import java.util.TreeMap;
  
  public class Main {
  
  	public static void main(String[] args) {
  
  		Scanner in = new Scanner(new BufferedInputStream(System.in));
  		PrintWriter out = new PrintWriter(new BufferedWriter(
  				new OutputStreamWriter(System.out)));
  
  		while (in.hasNext()) {
  			int n = in.nextInt(), a = in.nextInt(), b = in.nextInt(), c = 0;
  			int[] p = new int[n];
  
  			TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
  			for (int i = 0; i < n; i++) {
  				p[i] = in.nextInt();
  				map.put(p[i], i);
  			}
  			
  			if (a > b) {
  				int t = b;
  				b = a;
  				a = t;
  				c = 1;
  			}
  
  			boolean ok = true;
  			int[] cls = new int[n];
  			while (ok && map.size() > 0) {
  				Entry<Integer, Integer> last = map.lastEntry();
  				int v = last.getKey();
  				int idx = last.getValue();
  				if (map.containsKey(a - v)) {
  					cls[idx] = 0;
  					cls[map.get(a - v)] = 0;
  					map.remove(v);
  					map.remove(a -v);
  				} else if (map.containsKey(b - v)) {
  					cls[idx] = 1;
  					cls[map.get(b - v)] = 1;
  					map.remove(v);
  					map.remove(b -v);
  				} else 
  					ok = false;
  			}
  
  			if (!ok)
  				System.out.println("NO");
  			else {
  				System.out.println("YES");
  				for (int j = 0; j < cls.length; j++) {
  					if (j != 0)
  						System.out.print(" ");
  					System.out.print(c ^ cls[j]);
  				}
  				System.out.println();
  			}
  			out.flush();
  		}
  		in.close();
  	}
  
  }
  