#include <bits/stdc++.h>
using namespace std;
long long i, j, k, N, M, K, S, fg = 0;
struct node {
  long long b, c, id;
  bool operator<(const node& t) const { return t.c < c; }
} t1, t2, dat[100005];
struct node2 {
  long long a, b, c;
} a[100005];
bool cmp2(node2 a, node2 b) {
  if (a.a < b.a) {
    return true;
  }
  return false;
}
bool cmp3(node2 aa, node2 bb) {
  if (aa.b < bb.b) {
    return true;
  }
  return false;
}
priority_queue<node> q;
bool cmp(node a, node b) {
  if (a.b > b.b) return true;
  return false;
}
void clear() {
  memset(a, 0, sizeof(a));
  fg = 0;
  while (!q.empty()) q.pop();
}
void init() {
  scanf("%I64d%I64d%I64d", &N, &M, &S);
  for (i = 1; i <= M; i++) {
    scanf("%I64d", &a[i].a);
    a[i].b = i;
  }
  for (i = 1; i <= N; i++) {
    scanf("%I64d", &dat[i].b);
    dat[i].id = i;
  }
  for (i = 1; i <= N; i++) {
    scanf("%I64d", &dat[i].c);
  }
  sort(a + 1, a + 1 + M, cmp2);
  sort(dat + 1, dat + 1 + N, cmp);
}
bool check(long long x) {
  while (!q.empty()) q.pop();
  long long pos = 1, cost = 0;
  ;
  for (long long i = M; i >= 1; i -= x) {
    while (dat[pos].b >= a[i].a) {
      q.push(dat[pos]);
      pos++;
    }
    if (q.empty()) return false;
    for (long long j = max(i - x + 1, 1LL); j <= i; j++) {
      a[j].c = q.top().id;
    }
    cost += q.top().c;
    q.pop();
  }
  if (cost > S) return false;
  return true;
}
void print(long long x) {
  fg = 1;
  long long i;
  sort(a + 1, a + 1 + M, cmp3);
  printf("YES\n");
  for (i = 1; i <= M; i++) {
    printf("%I64d%c", a[i].c, (i == M) ? '\n' : ' ');
  }
  for (i = 1; i <= M; i++) {
  }
}
void calc() {
  long long l = 1, m, h = M;
  while (l <= h) {
    m = (l + h) / 2;
    if (check(m)) {
      h = m - 1;
    } else
      l = m + 1;
  }
  for (i = max(0LL, l - 5LL); i <= min(M, l + 5LL); i++) {
    if (check(i)) {
      print(i);
      break;
    }
  }
  if (!fg) printf("NO\n");
}
int main() {
  clear();
  init();
  calc();
}
