#include <bits/stdc++.h>
using namespace std;
struct node {
  int pos, sum, num;
};
inline bool operator<(const node &a, const node &b) { return a.pos < b.pos; };
struct m_part {
  int l, r, ans, id;
} p[100001];
struct m_act {
  int l, r, k, id;
} a[100001];
bool cmp2(m_part a, m_part b) { return a.id < b.id; }
bool cmpp(m_part a, m_part b) { return a.l < b.l; }
bool cmpa(m_act a, m_act b) { return a.l < b.l; }
multiset<node> st;
int n, m;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &p[i].l, &p[i].r);
    p[i].id = i;
  }
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &a[i].l, &a[i].r, &a[i].k);
    a[i].id = i;
  }
  sort(p + 1, p + 1 + n, cmpp);
  sort(a + 1, a + 1 + m, cmpa);
  multiset<node>::iterator it;
  int t, w = 1;
  bool key = true;
  for (t = 1; t <= n; t++) {
    while (w <= m && a[w].l <= p[t].l) {
      node ll;
      ll.pos = a[w].r;
      ll.sum = a[w].k;
      ll.num = a[w].id;
      st.insert(ll);
      w++;
    }
    node pp;
    pp.pos = p[t].r;
    pp.num = pp.sum = 0;
    it = st.lower_bound(pp);
    if (it == st.end()) {
      key = false;
      break;
    }
    pp = *it;
    pp.sum--;
    st.erase(it);
    p[t].ans = pp.num;
    if (pp.sum > 0) st.insert(pp);
  }
  if (!key)
    printf("NO\n");
  else {
    printf("YES\n");
    sort(p + 1, p + 1 + n, cmp2);
    for (int i = 1; i <= n; i++) {
      printf("%d", p[i].ans);
      if (i == n)
        printf("\n");
      else
        printf(" ");
    }
  }
}
