#include <bits/stdc++.h>
char ch;
inline void read(int &x) {
  x = 0;
  ch = getchar();
  while (ch <= 32) ch = getchar();
  while (ch > 32) {
    x = x * 10 + ch - 48;
    ch = getchar();
  };
};
int n, m, s;
int i;
int a[100005], ano[100005];
int b[100005], bno[100005], c[100005];
inline void qsort1(int l, int r) {
  int i = l, j = r, mid = a[(l + r) >> 1], p;
  while (i < j) {
    while (a[i] < mid) ++i;
    while (a[j] > mid) --j;
    if (i <= j) {
      p = a[i];
      a[i] = a[j];
      a[j] = p;
      p = ano[i];
      ano[i] = ano[j];
      ano[j] = p;
      ++i;
      --j;
    };
  };
  if (l < j) qsort1(l, j);
  if (i < r) qsort1(i, r);
};
inline void qsort2(int l, int r) {
  int i = l, j = r, mid = b[(l + r) >> 1], p;
  while (i < j) {
    while (b[i] < mid) ++i;
    while (b[j] > mid) --j;
    if (i <= j) {
      p = b[i];
      b[i] = b[j];
      b[j] = p;
      p = c[i];
      c[i] = c[j];
      c[j] = p;
      p = bno[i];
      bno[i] = bno[j];
      bno[j] = p;
      ++i;
      --j;
    };
  };
  if (l < j) qsort2(l, j);
  if (i < r) qsort2(i, r);
};
int M;
int tr[262149];
int ans[100005];
inline int min(int a, int b) { return (a < b) ? a : b; };
inline void ins(int x, int val) {
  x += M + 1;
  while (x >= 1) {
    if (val < tr[x])
      tr[x] = val;
    else
      break;
    x >>= 1;
  };
};
inline bool check(int x) {
  memset(ans, 0, sizeof(ans));
  int i, p = n;
  int cost = 0;
  for (i = M + M; i >= 1; i--) tr[i] = 2000000000;
  for (i = m; i >= 1;) {
    int ta = a[i];
    while ((p >= 1) && (b[p] >= ta)) {
      ins(p, c[p]);
      --p;
    };
    int mi = tr[1];
    if (mi == 2000000000) return false;
    if (cost + mi > s) return false;
    cost += mi;
    int pp = 1;
    while (pp < M) {
      pp <<= 1;
      if (tr[pp] != mi) ++pp;
    };
    int tb = pp - M - 1;
    tb = bno[tb];
    int x1 = x;
    for (; i >= 1 && x1 >= 1; x1--) {
      ans[ano[i]] = tb;
      --i;
    };
    tr[pp] = 2000000000;
    pp >>= 1;
    while (pp >= 1) {
      tr[pp] = min(tr[pp + pp], tr[pp + pp + 1]);
      pp >>= 1;
    };
  };
  return true;
};
int main() {
  read(n);
  read(m);
  read(s);
  M = 16;
  while (M < n + 10) M += M;
  for (i = 1; i <= m; i++) {
    read(a[i]);
    ano[i] = i;
  };
  for (i = 1; i <= n; i++) {
    read(b[i]);
    bno[i] = i;
  };
  for (i = 1; i <= n; i++) {
    read(c[i]);
  };
  qsort1(1, m);
  qsort2(1, n);
  if (!check(m)) {
    printf("NO\n");
    return 0;
  } else {
    int l = 1, r = m, mid;
    while (l < r) {
      mid = (l + r) >> 1;
      if (check(mid))
        r = mid;
      else
        l = mid + 1;
    };
    check(l);
    printf("YES\n");
    for (i = 1; i <= m; i++) printf("%d ", ans[i]);
    printf("\n");
  };
}
