#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int m;
int n;
map<int, int> id;
int rev[100500];
int a[2];
int w[100500], ans[100500];
set<int> s;
set<int> ss;
void go(int x) {
  w[x] = 1;
  x = rev[x];
  s.insert(x);
  for (int i = 0; i < (2); i++) {
    int tmp = a[i] - x;
    if (ss.find(tmp) != s.end()) {
      int p = id[tmp];
      if (!w[p]) go(p);
    }
  }
}
int check(set<int> s) {
  for (int i = 0; i < (2); i++) {
    int g = 1;
    for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) {
      int tmp = a[i] - *it;
      if (s.find(tmp) == s.end()) {
        g = 0;
        break;
      }
    }
    if (g) {
      for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) {
        ans[id[*it]] = i;
      }
      return 1;
    }
  }
  return 0;
}
int main() {
  cin >> n >> a[0] >> a[1];
  for (int i = 0; i < (n); i++) {
    int x;
    cin >> x;
    id[x] = i;
    rev[i] = x;
    ss.insert(x);
  }
  for (int i = 0; i < (n); i++)
    if (!w[i]) {
      s.clear();
      go(i);
      if (!check(s)) {
        cout << "NO" << endl;
        return 0;
      }
    }
  cout << "YES" << endl;
  for (int i = 0; i < (n); i++) cout << ans[i] << ' ';
  return 0;
}
