#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
long long qpow(long long a, long long b) {
  long long res = 1, base = a;
  while (b) {
    if (b % 2) res = res * base;
    base = base * base;
    b /= 2;
  }
  return res;
}
long long powmod(long long a, long long b) {
  long long res = 1, base = a;
  while (b) {
    if (b % 2) res = res * base % 9999677;
    base = base * base % 9999677;
    b /= 2;
  }
  return res;
}
struct node {
  int a, b, c, id;
} aa[500005], a[500005];
set<pair<int, int> > s;
int ans[500005];
int n, m, price;
void read() {
  scanf("%d%d%d", &n, &m, &price);
  for (int i = 0; i < m; i++) scanf("%d", &a[i].a), a[i].id = i;
  for (int i = 0; i < n; i++) scanf("%d", &aa[i].b);
  for (int i = 0; i < n; i++) scanf("%d", &aa[i].c), aa[i].id = i;
}
int cmp1(node a, node b) { return a.a > b.a; }
int cmp2(node a, node b) { return a.b > b.b; }
bool check(int x) {
  int ok = 1, cnt = price;
  s.clear();
  for (int i = 0, j = 0; i < m && ok; i += x) {
    while (j < n && aa[j].b >= a[i].a)
      s.insert(make_pair(aa[j].c, aa[j].id)), j++;
    if (!s.empty() && cnt >= s.begin()->first)
      cnt -= s.begin()->first, s.erase(s.begin());
    else
      ok = 0;
  }
  return ok;
}
void work() {
  sort(a, a + m, cmp1);
  sort(aa, aa + n, cmp2);
  int bot = 1, top = m, mid, res = -1;
  while (top >= bot) {
    int mid = (top + bot) >> 1;
    if (check(mid))
      res = mid, top = mid - 1;
    else
      bot = mid + 1;
  }
  if (res == -1)
    printf("NO\n");
  else {
    printf("YES\n");
    int cnt = price;
    s.clear();
    for (int i = 0, j = 0; i < m; i += res) {
      while (j < n && aa[j].b >= a[i].a)
        s.insert(make_pair(aa[j].c, aa[j].id)), j++;
      int t = s.begin()->second;
      for (int k = i; k < m && k < i + res; k++) ans[a[k].id] = t;
      cnt -= s.begin()->first, s.erase(s.begin());
    }
    for (int i = 0; i < m; i++)
      printf("%d%c", ++ans[i], i == m - 1 ? '\n' : ' ');
  }
}
int main() {
  read();
  work();
  return 0;
}
