#include <bits/stdc++.h>
using namespace std;
class dsu {
 public:
  vector<int> p;
  int n;
  dsu(int _n) : n(_n) {
    p.resize(n);
    iota(p.begin(), p.end(), 0);
  }
  inline int get(int x) { return (x == p[x] ? x : (p[x] = get(p[x]))); }
  inline bool unite(int x, int y) {
    x = get(x);
    y = get(y);
    if (x != y) {
      p[x] = y;
      return true;
    }
    return false;
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(15);
  int n, a, b;
  cin >> n >> a >> b;
  vector<int> p(n);
  map<int, int> idx;
  for (int i = 0; i < n; i++) {
    cin >> p[i];
    idx[p[i]] = i;
  }
  dsu ds(n + 2);
  for (int i = 0; i < n; i++) {
    int& x = p[i];
    if (idx.count(a - x)) {
      ds.unite(i, idx[a - x]);
    } else {
      ds.unite(i, n + 1);
    }
    if (idx.count(b - x)) {
      ds.unite(i, idx[b - x]);
    } else {
      ds.unite(i, n);
    }
  }
  if (ds.get(n) == ds.get(n + 1)) {
    cout << "NO\n";
  } else {
    cout << "YES\n";
    for (int i = 0; i < n; i++) {
      if (i > 0) cout << ' ';
      cout << (ds.get(i) == ds.get(n + 1));
    }
    cout << '\n';
  }
  return 0;
}
