#include <bits/stdc++.h>
using namespace std;
int n, m, s;
struct E {
  int lv, p, id, I;
} arr[100009], seg_tree[400009], bugs[100009];
bool operator<(E a, E b) {
  if (a.lv == b.lv) return a.p < b.p;
  return a.lv < b.lv;
}
E mrg(E a, E b) {
  E ret;
  if (a.p < b.p)
    ret = a;
  else
    ret = b;
  return ret;
}
void build(int node, int l, int r) {
  if (l == r) {
    seg_tree[node] = arr[l];
    return;
  }
  build(node * 2, l, (l + r) / 2);
  build(node * 2 + 1, (l + r) / 2 + 1, r);
  seg_tree[node] = mrg(seg_tree[node * 2], seg_tree[node * 2 + 1]);
}
void UPD(int node, int l, int r, int k, int val) {
  if (l == r) {
    seg_tree[node].p = val;
    return;
  }
  if ((l + r) / 2 >= k)
    UPD(node * 2, l, (l + r) / 2, k, val);
  else
    UPD(node * 2 + 1, (l + r) / 2 + 1, r, k, val);
  seg_tree[node] = mrg(seg_tree[node * 2], seg_tree[node * 2 + 1]);
}
E query(int node, int l, int r, int s, int e) {
  if (l >= s && r <= e) return seg_tree[node];
  if ((l + r) / 2 >= s && (l + r) / 2 + 1 <= e)
    return mrg(query(node * 2, l, (l + r) / 2, s, e),
               query(node * 2 + 1, (l + r) / 2 + 1, r, s, e));
  else if ((l + r) / 2 >= s)
    return query(node * 2, l, (l + r) / 2, s, e);
  else
    return query(node * 2 + 1, (l + r) / 2 + 1, r, s, e);
}
int Ans[100009];
bool check(int num) {
  build(1, 0, n - 1);
  long long ans = 0;
  for (int i = m - 1; i >= 0; i -= num) {
    int l = -1, r = n;
    while (r - l > 1) {
      int M = (r + l) / 2;
      if (arr[M].lv >= bugs[i].lv)
        r = M;
      else
        l = M;
    }
    if (r == n) return 0;
    E mini = query(1, 0, n - 1, r, n - 1);
    ans += mini.p;
    UPD(1, 0, n - 1, mini.id, 1000000009);
    for (int j = i; j > max(-1, i - num); j--) {
      Ans[bugs[j].I] = mini.I;
    }
  }
  if (ans <= s) return 1;
  return 0;
}
int main() {
  cin >> n >> m >> s;
  for (int i = 0; i < m; i++) {
    cin >> bugs[i].lv;
    bugs[i].I = i;
  }
  for (int i = 0; i < n; i++) {
    cin >> arr[i].lv;
    arr[i].I = i;
  }
  for (int i = 0; i < n; i++) cin >> arr[i].p;
  sort(arr, arr + n);
  sort(bugs, bugs + m);
  for (int i = 0; i < n; i++) {
    arr[i].id = i;
  }
  int l = 0, r = m + 2;
  while (r - l > 1) {
    int M = (l + r) / 2;
    if (check(M))
      r = M;
    else
      l = M;
  }
  if (r == m + 2) {
    cout << "NO" << endl;
    exit(0);
  }
  check(r);
  cout << "YES" << endl;
  for (int i = 0; i < m; i++) {
    cout << Ans[i] + 1 << " ";
  }
  cout << endl;
}
