#include <bits/stdc++.h>
const int maxn = 1e6 + 10;
const int mod = 998244353;
using namespace std;
int n, m, a, b, c, cnt, flag = 1;
int dp[5005][5005], col[5005];
vector<int> g[5005], v[5005][2];
void dfs(int x, int k) {
  col[x] = k;
  v[cnt][k == 1].push_back(x);
  for (int y : g[x]) {
    if (!col[y])
      dfs(y, -k);
    else if (col[y] == col[x])
      flag = 0;
  }
}
int main() {
  scanf("%d%d%d%d%d", &n, &m, &a, &b, &c);
  for (int i = 0, x, y; i < m; i++) {
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    cnt++;
    if (!col[i]) dfs(i, 1);
  }
  int now = 0;
  dp[0][0] = 1;
  for (int i = 1; i <= cnt; i++) {
    for (int j = 0; j <= n; j++) {
      if (j + v[i][0].size() <= n) dp[i][j + v[i][0].size()] |= dp[i - 1][j];
      if (j + v[i][1].size() <= n) dp[i][j + v[i][1].size()] |= dp[i - 1][j];
    }
  }
  if (!dp[cnt][b] || !flag) {
    printf("NO\n");
    return 0;
  }
  now = b;
  for (int i = cnt; i > 0; i--) {
    if (now - v[i][0].size() >= 0 && dp[i - 1][now - v[i][0].size()]) {
      for (int j : v[i][0]) col[j] = 2;
      for (int j : v[i][1])
        if (a)
          a--, col[j] = 1;
        else
          col[j] = 3;
      now -= v[i][0].size();
    } else {
      for (int j : v[i][1]) col[j] = 2;
      for (int j : v[i][0])
        if (a)
          a--, col[j] = 1;
        else
          col[j] = 3;
      now -= v[i][1].size();
    }
  }
  printf("YES\n");
  for (int i = 1; i <= n; i++) printf("%d", col[i]);
  return 0;
}
