#include <bits/stdc++.h>
using namespace std;
const int inf = ~0U >> 1;
const long long INF = ~0ULL >> 1;
const double pi = acos(-1.0);
template <class T>
inline T sqr(T a) {
  return a * a;
}
template <class T>
inline T min(T a, T b, T c) {
  return min(min(a, b), c);
}
template <class T>
inline T max(T a, T b, T c) {
  return max(max(a, b), c);
}
template <class T>
inline void read(T &n) {
  char c;
  for (c = getchar(); !(c >= '0' && c <= '9'); c = getchar())
    ;
  n = c - '0';
  for (c = getchar(); c >= '0' && c <= '9'; c = getchar()) n = n * 10 + c - '0';
}
int pw(int base, int n, int mo) {
  if (n == 0) return 1;
  if (n == 1) return base;
  int tmp = pw(base, n >> 1, mo);
  tmp = (long long)tmp * tmp % mo;
  if (n & 1) tmp = (long long)tmp * base % mo;
  return tmp;
}
const int maxn = 2000000;
int N, K, a[maxn], q[maxn], negative[maxn];
map<int, int> hash;
pair<int, int> S[maxn];
int top;
stack<pair<int, int> > S1, S2;
void invalid() {
  puts("NO");
  exit(0);
}
int main() {
  scanf("%d", &N);
  for (int i = (1); i <= (N); ++i) scanf("%d", &a[i]);
  scanf("%d", &K);
  for (int i = (1); i <= (K); ++i) scanf("%d", &q[i]), negative[q[i]] = 1;
  for (int i = (1); i <= (N); ++i) {
    if (negative[i]) {
      while (S1.size() && (S1.top().first != a[i] || S2.size())) {
        if (S2.size() && S1.top().first == S2.top().first) {
          a[S2.top().second] *= -1;
          S2.pop();
          S1.pop();
        } else {
          S2.push(S1.top());
          S1.pop();
        }
      }
      if (S2.size() || !S1.size()) invalid();
      if (S1.top().first != a[i]) invalid();
      a[i] *= -1;
      S1.pop();
    } else
      S1.push((make_pair(a[i], i)));
  }
  while (S1.size()) {
    pair<int, int> cur = S1.top();
    S1.pop();
    while (S1.size() && (S1.top().first != cur.first || S2.size())) {
      if (S2.size() && S1.top().first == S2.top().first) {
        a[S2.top().second] *= -1;
        S2.pop();
        S1.pop();
      } else {
        S2.push(S1.top());
        S1.pop();
      }
    }
    if (S2.size() || !S1.size()) invalid();
    if (S1.top().first != cur.first) invalid();
    a[cur.second] *= -1;
    S1.pop();
  }
  puts("YES");
  for (int i = (1); i <= (N); ++i) printf("%d ", a[i]);
  puts("");
  return 0;
}
