#include <bits/stdc++.h>
using namespace std;
int n, m, s;
int a[100000];
int b[100000];
int c[100000];
int ordb[100000];
int ordr[100000];
int chi[100000];
bool bord(int x, int y) { return a[x] > a[y]; }
bool rord(int x, int y) { return b[x] > b[y]; }
struct codaord {
  bool operator()(int x, int y) { return c[x] > c[y]; }
};
bool fai(int k) {
  int dispo = s;
  priority_queue<int, vector<int>, codaord> coda;
  int bug = 0;
  int rag = 0;
  while (bug < m) {
    while (b[ordr[rag]] >= a[ordb[bug]] && rag < n) {
      coda.push(ordr[rag]);
      rag++;
    }
    if (coda.empty()) return false;
    int x = coda.top();
    coda.pop();
    for (int i = 0; i < k && bug + i < m; i++) chi[ordb[bug + i]] = x;
    bug += k;
    dispo -= c[x];
    if (dispo < 0) return false;
  }
  return true;
}
int main() {
  cin >> n >> m >> s;
  for (int i = 0; i < m; i++) cin >> a[i];
  for (int i = 0; i < n; i++) cin >> b[i];
  for (int i = 0; i < n; i++) cin >> c[i];
  for (int i = 0; i < m; i++) ordb[i] = i;
  for (int i = 0; i < n; i++) ordr[i] = i;
  sort(ordr, ordr + n, rord);
  sort(ordb, ordb + m, bord);
  int l = 1, r = m + 1;
  while (l < r) {
    int med = (l + r) / 2;
    if (fai(med))
      r = med;
    else
      l = med + 1;
  }
  if (l == m + 1) {
    cout << "NO";
    return 0;
  }
  cout << "YES\n";
  fai(l);
  for (int i = 0; i < m; i++) cout << chi[i] + 1 << ' ';
  return 0;
}
