#include <bits/stdc++.h>
using namespace std;
std::mt19937 rnd(
    (int)std::chrono::steady_clock::now().time_since_epoch().count());
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 300000;
const int MAXM = 300000;
const int MAXCOMP = MAXN;
int n, m, nspecial;
bool isspecial[MAXN];
int vgain[MAXN];
int e[MAXM][2], ecost[MAXM];
long long ans[MAXN];
vector<int> adj[MAXN];
int comp[MAXN], ncomp;
int stck[MAXN], nstck;
int id[MAXN], mnid[MAXN], nid;
long long compgain[MAXCOMP];
vector<pair<int, int>> compadj[MAXCOMP];
int compcnt[MAXCOMP];
void tarjan(int at, int parid) {
  id[at] = mnid[at] = nid++;
  stck[nstck++] = at;
  for (int i = (0); i < (((int)(adj[at]).size())); ++i) {
    int eid = adj[at][i];
    if (eid == parid) continue;
    int to = e[eid][0] ^ e[eid][1] ^ at;
    if (id[to] == -1) {
      tarjan(to, eid);
      mnid[at] = min(mnid[at], mnid[to]);
    } else if (comp[to] == -1) {
      mnid[at] = min(mnid[at], id[to]);
    }
  }
  if (mnid[at] == id[at]) {
    while (comp[at] == -1) comp[stck[--nstck]] = ncomp;
    ++ncomp;
  }
}
int subtreecnt[MAXCOMP];
long long subtreegain[MAXCOMP];
long long dpdown[MAXCOMP];
long long dpup[MAXCOMP];
long long compans[MAXCOMP];
void dfsdown(int at, int par) {
  subtreecnt[at] = compcnt[at];
  subtreegain[at] = compgain[at];
  dpdown[at] = compgain[at];
  for (int i = (0); i < (((int)(compadj[at]).size())); ++i) {
    int to = compadj[at][i].first, cost = compadj[at][i].second;
    if (to == par) continue;
    dfsdown(to, at);
    subtreecnt[at] += subtreecnt[to];
    subtreegain[at] += subtreegain[to];
    if (subtreecnt[to] == 0)
      dpdown[at] += subtreegain[to];
    else
      dpdown[at] += max(0LL, dpdown[to] - cost);
  }
}
void dfsup(int at, int par, int parcost) {
  if (par == -1) {
    dpup[at] = 0;
  } else {
    long long compgain = dpdown[par] + dpup[par] -
                         (subtreecnt[at] == 0 ? subtreegain[at]
                                              : max(0LL, dpdown[at] - parcost));
    dpup[at] = max(0LL, compgain - parcost);
  }
  for (int i = (0); i < (((int)(compadj[at]).size())); ++i) {
    int to = compadj[at][i].first, cost = compadj[at][i].second;
    if (to == par) continue;
    dfsup(to, at, cost);
  }
}
void dfsempty(int at, int par) {
  for (int i = (0); i < (((int)(compadj[at]).size())); ++i) {
    int to = compadj[at][i].first, cost = compadj[at][i].second;
    if (to == par) continue;
    if (subtreecnt[to] == 0) compans[to] = max(compans[to], compans[at]);
    dfsempty(to, at);
  }
}
void solve() {
  for (int i = (0); i < (m); ++i)
    for (int j = (0); j < (2); ++j) adj[e[i][j]].push_back(i);
  nid = ncomp = nstck = 0;
  for (int i = (0); i < (n); ++i) comp[i] = id[i] = -1;
  tarjan(0, -1);
  for (int i = (0); i < (n); ++i) assert(comp[i] != -1);
  for (int i = (0); i < (ncomp); ++i) compgain[i] = 0, compcnt[i] = 0;
  for (int i = (0); i < (n); ++i) {
    int c = comp[i];
    compgain[c] += vgain[i];
    compcnt[c] += isspecial[i] ? 1 : 0;
  }
  for (int i = (0); i < (m); ++i) {
    int a = comp[e[i][0]], b = comp[e[i][1]];
    if (a == b) continue;
    compadj[a].push_back(make_pair(b, ecost[i])),
        compadj[b].push_back(make_pair(a, ecost[i]));
  }
  int comproot = -1;
  for (int i = (0); i < (ncomp); ++i)
    if (compcnt[i] > 0) {
      comproot = i;
      break;
    }
  assert(comproot != -1);
  dfsdown(comproot, -1);
  dfsup(comproot, -1, 0);
  for (int i = (0); i < (ncomp); ++i) compans[i] = dpdown[i] + dpup[i];
  dfsempty(comproot, -1);
  for (int i = (0); i < (n); ++i) ans[i] = compans[comp[i]];
}
void run() {
  scanf("%d%d%d", &n, &m, &nspecial);
  for (int i = (0); i < (n); ++i) isspecial[i] = false;
  for (int i = (0); i < (nspecial); ++i) {
    int x;
    scanf("%d", &x);
    --x;
    isspecial[x] = true;
  }
  for (int i = (0); i < (n); ++i) scanf("%d", &vgain[i]);
  for (int i = (0); i < (m); ++i) scanf("%d", &ecost[i]);
  for (int i = (0); i < (m); ++i)
    for (int j = (0); j < (2); ++j) scanf("%d", &e[i][j]), --e[i][j];
  solve();
  for (int i = (0); i < (n); ++i) {
    if (i != 0) printf(" ");
    printf("%lld", ans[i]);
  }
  puts("");
}
int main() {
  run();
  return 0;
}
