#include <bits/stdc++.h>
using namespace std;
queue<int> W[200000 + 10];
pair<int, int> A[200000 + 10];
vector<int> st;
int ans[200000 + 11];
int main() {
  int i, j, k, cs, t, n;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d %d", &A[i].first, &A[i].second);
  sort(A + 1, A + n + 1);
  for (i = 1; i <= n; i++) {
    scanf("%d", &j);
    W[j + 100000].push(i);
  }
  st.push_back(1);
  for (i = 2; i <= n; i++) {
    if (A[i].first >= A[i - 1].first && A[i].second >= A[i - 1].second)
      st.push_back(i);
  }
  st.push_back(n + 1);
  for (i = 0; i < st.size() - 1; i++) {
    for (j = st[i]; j < st[i + 1]; j++) {
      int sp = A[j].second - A[j].first + 100000;
      if (W[sp].empty()) {
        printf("NO\n");
        return 0;
      }
      int nw = W[sp].front();
      ans[nw] = j;
      W[sp].pop();
    }
  }
  for (i = 2; i <= n; i++) {
    if (A[ans[i - 1]].first >= A[ans[i]].first &&
        A[ans[i - 1]].second >= A[ans[i]].second) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  for (i = 1; i <= n; i++) printf("%d %d\n", A[ans[i]].first, A[ans[i]].second);
  return 0;
}
