#include <bits/stdc++.h>
using namespace std;
struct tree {
  long long v, id, l, r;
} t[1000005];
struct peo {
  long long b, c;
} p[1000005];
bool cmp(const peo &i, const peo &j) { return i.b < j.b; }
long long n, m, a[1000005], s, belong[1000005], oldwz[1000005], pold[1000005];
bool cmp2(long long i, long long j) { return a[i] < a[j]; }
bool cmp3(long long i, long long j) { return p[i].b < p[j].b; }
long long merge(long long x, long long y) {
  if (!x || !y) return x + y;
  if (t[x].v > t[y].v) swap(x, y);
  t[x].r = merge(t[x].r, y);
  swap(t[x].l, t[x].r);
  return x;
}
bool can(long long day) {
  long long sum = 0, zz = n, tn = 0, root = 0, bug;
  t[0] = (tree){0, 0, 0, 0};
  for (bug = m; bug > 0; bug -= day) {
    while (p[zz].b >= a[bug]) {
      t[++tn] = (tree){p[zz].c, zz, 0, 0};
      root = merge(root, tn);
      zz--;
    }
    if (root == 0) return 0;
    sum += t[root].v;
    root = merge(t[root].l, t[root].r);
  }
  if (sum <= s)
    return 1;
  else
    return 0;
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &m, &s);
  for (long long i = 1; i <= m; i++) scanf("%I64d", &a[i]);
  for (long long i = 1; i <= n; i++) scanf("%I64d", &p[i].b);
  for (long long i = 1; i <= n; i++) scanf("%I64d", &p[i].c);
  for (long long i = 1; i <= m; i++) oldwz[i] = i;
  sort(oldwz + 1, oldwz + m + 1, cmp2);
  sort(a + 1, a + m + 1);
  for (long long i = 1; i <= n; i++) pold[i] = i;
  sort(pold + 1, pold + n + 1, cmp3);
  sort(p + 1, p + n + 1, cmp);
  long long l = 0, r = m + 3;
  while (l + 1 < r) {
    long long mid = (l + r) / 2;
    if (can(mid))
      r = mid;
    else
      l = mid;
  }
  if (r == m + 3)
    printf("NO");
  else {
    int rfy;
    printf("YES\n");
    long long zz = n, tn = 0, root = 0;
    t[0] = (tree){0, 0, 0, 0};
    for (long long bug = m; bug > 0; bug -= r) {
      while (p[zz].b >= a[bug]) {
        t[++tn] = (tree){p[zz].c, zz, 0, 0};
        root = merge(root, tn);
        zz--;
      }
      for (long long i = max(1ll, bug - r + 1); i <= bug; i++)
        belong[oldwz[i]] = pold[t[root].id];
      root = merge(t[root].l, t[root].r);
    }
    for (long long i = 1; i <= m; i++) printf("%I64d ", belong[i]);
  }
  return 0;
}
