#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int INF = 0x3f3f3f3f;
struct Node {
  int x, c, idx;
  bool operator<(const Node& t) const { return x < t.x; }
};
Node a[MAXN], b[MAXN];
int minv[MAXN << 2], pos[MAXN << 2];
int ans[MAXN];
int n, m, s;
void pushup(int o) {
  if (minv[(o << 1)] < minv[(o << 1 | 1)]) {
    minv[o] = minv[(o << 1)];
    pos[o] = pos[(o << 1)];
  } else {
    minv[o] = minv[(o << 1 | 1)];
    pos[o] = pos[(o << 1 | 1)];
  }
}
void build(int o, int l, int r) {
  if (l == r) {
    minv[o] = a[l].c;
    pos[o] = l;
    return;
  }
  int m = ((l + r) >> 1);
  build((o << 1), l, m);
  build((o << 1 | 1), m + 1, r);
  pushup(o);
}
int query_x, query_min;
void query(int L, int R, int o, int l, int r) {
  if (L <= l && r <= R) {
    if (query_min > minv[o]) {
      query_min = minv[o];
      query_x = pos[o];
    }
    return;
  }
  int m = ((l + r) >> 1);
  if (L <= m) query(L, R, (o << 1), l, m);
  if (m < R) query(L, R, (o << 1 | 1), m + 1, r);
}
void update(int x, int v, int o, int l, int r) {
  if (l == r) {
    minv[o] = v;
    return;
  }
  int m = ((l + r) >> 1);
  if (x <= m)
    update(x, v, (o << 1), l, m);
  else
    update(x, v, (o << 1 | 1), m + 1, r);
  pushup(o);
}
int search(int x, int l = 1, int r = n) {
  while (l < r) {
    int m = ((l + r) >> 1);
    if (a[m].x >= x)
      r = m;
    else
      l = m + 1;
  }
  return l;
}
int check(int day) {
  int sum = 0, t = m;
  build(1, 1, n);
  while (t > 0) {
    int l = search(b[t].x);
    if (a[l].x < b[t].x) return 0;
    query_min = INF;
    query(l, n, 1, 1, n);
    sum += a[query_x].c;
    if (sum > s) return 0;
    update(query_x, INF, 1, 1, n);
    for (int i = (0); i < (day); ++i)
      if (t - i >= 1) ans[b[t - i].idx] = a[query_x].idx;
    t -= day;
  }
  return 1;
}
void solve() {
  for (int i = (1); i <= (m); ++i) {
    scanf("%d", &b[i].x);
    b[i].idx = i;
  }
  for (int i = (1); i <= (n); ++i) {
    scanf("%d", &a[i].x);
    a[i].idx = i;
  }
  for (int i = (1); i <= (n); ++i) scanf("%d", &a[i].c);
  sort(a + 1, a + n + 1);
  sort(b + 1, b + m + 1);
  int l = 1, r = m;
  while (l < r) {
    int m = ((l + r) >> 1);
    if (check(m))
      r = m;
    else
      l = m + 1;
  }
  if (check(l)) {
    printf("YES\n");
    for (int i = (1); i <= (m); ++i) printf("%d%c", ans[i], i < m ? ' ' : '\n');
  } else
    printf("NO\n");
}
int main() {
  while (~scanf("%d%d%d", &n, &m, &s)) solve();
  return 0;
}
