#include <bits/stdc++.h>
using namespace std;
const int Q = 1e9 + 7;
const int M = 1e5 + 10;
int ans[M], a[M];
int b[M];
int c[M];
pair<int, int> mi[5 * M];
vector<pair<pair<int, int>, pair<int, int> > > q;
vector<pair<int, int> > d;
void build(int i, int L, int R) {
  if (L == R - 1) {
    mi[i] = make_pair(a[L], L);
    return;
  }
  int M = (L + R) / 2;
  build(2 * i + 1, L, M);
  build(2 * i + 2, M, R);
  mi[i] = min(mi[2 * i + 1], mi[2 * i + 2]);
}
void upd(int i, int L, int R, int j, int x) {
  if (L == R - 1) {
    mi[i].first = x;
    return;
  }
  int M = (L + R) / 2;
  if (j < M)
    upd(2 * i + 1, L, M, j, x);
  else
    upd(2 * i + 2, M, R, j, x);
  mi[i] = min(mi[2 * i + 1], mi[2 * i + 2]);
}
pair<int, int> get(int i, int L, int R, int l, int r) {
  if ((l >= R) || (L >= r)) {
    return make_pair(Q + 10, 0);
  }
  if ((l <= L) && (R <= r)) {
    return mi[i];
  }
  int M = (L + R) / 2;
  return min(get(2 * i + 1, L, M, l, r), get(2 * i + 2, M, R, l, r));
}
int main() {
  int n, m, l, r, s, l1, r1, mid, m1, i, cur, j, t;
  int curz;
  bool f;
  scanf("%d%d%d", &n, &m, &s);
  for (i = 0; i < m; i++) {
    scanf("%d", &t);
    d.push_back(make_pair(t, i));
  }
  sort(d.begin(), d.end());
  for (i = 0; i < n; i++) {
    scanf("%d", &b[i]);
  }
  for (i = 0; i < n; i++) {
    scanf("%d", &c[i]);
  }
  l = 0;
  r = m + 1;
  while (l != r - 1) {
    f = true;
    mid = (l + r) / 2;
    if (mid == 2) mid = 2;
    q.resize(0);
    for (i = 0; i < n; i++) {
      q.push_back(make_pair(make_pair(b[i], c[i]), make_pair(i + 1, mid)));
    }
    sort(q.begin(), q.end());
    for (i = 0; i < n; i++) {
      a[i] = q[i].first.second;
    }
    a[n] = Q - 1;
    curz = 0;
    build(0, 0, n + 1);
    cur = m - 1;
    while (cur >= 0) {
      l1 = -1;
      r1 = n;
      while (l1 != r1 - 1) {
        m1 = (l1 + r1) / 2;
        if (q[m1].first.first >= d[cur].first)
          r1 = m1;
        else
          l1 = m1;
      }
      if (r1 == n) {
        f = false;
        break;
      }
      r1 = get(0, 0, n + 1, r1, n + 1).second;
      if (r1 >= n) {
        f = false;
        break;
      }
      cur -= mid;
      if (curz + q[r1].first.second > s) {
        f = false;
        break;
      }
      curz += q[r1].first.second;
      upd(0, 0, n + 1, r1, Q);
    }
    if (f) {
      r = mid;
    } else {
      l = mid;
    }
  }
  if (r == m + 1) {
    printf("NO");
    return 0;
  }
  q.resize(0);
  for (i = 0; i < n; i++) {
    q.push_back(make_pair(make_pair(b[i], c[i]), make_pair(i + 1, r)));
  }
  sort(q.begin(), q.end());
  for (i = 0; i < n; i++) {
    a[i] = q[i].first.second;
  }
  a[n] = Q - 1;
  curz = 0;
  build(0, 0, n + 1);
  for (i = 0; i < m; i++) ans[i] = -1;
  cur = m - 1;
  while (cur >= 0) {
    l1 = -1;
    r1 = n;
    while (l1 != r1 - 1) {
      m1 = (l1 + r1) / 2;
      if (q[m1].first.first >= d[cur].first)
        r1 = m1;
      else
        l1 = m1;
    }
    if (r1 == n) {
      f = false;
      break;
    }
    r1 = get(0, 0, n + 1, r1, n + 1).second;
    if (r1 >= n) {
      f = false;
      break;
    }
    for (i = cur; i >= max(cur - r, 0); i--) {
      ans[d[i].second] = q[r1].second.first;
    }
    cur -= r;
    curz += q[r1].first.second;
    upd(0, 0, n + 1, r1, Q);
  }
  printf("YES\n");
  for (i = 0; i < m; i++) printf("%d ", ans[i]);
  return 0;
}
