#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  char c = getchar();
  long long x = 0;
  bool f = 0;
  for (; !isdigit(c); c = getchar()) f ^= !(c ^ 45);
  for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  if (f) x = -x;
  return x;
}
long long n, m, k, uu[300005], vv[300005], w[300005];
vector<long long> e[300005];
bool bo[300005], have[300005];
long long dfn[300005], low[300005], idx, val[300005], a[300005], cnt,
    bel[300005];
stack<long long> s;
void tarjan(long long u, long long pa) {
  dfn[u] = low[u] = ++idx;
  s.push(u);
  for (auto v : e[u]) {
    if (v == pa) continue;
    if (!dfn[v])
      tarjan(v, u), low[u] = min(low[u], low[v]);
    else
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] != dfn[u]) return;
  ++cnt;
  long long v;
  do {
    v = s.top();
    s.pop();
    val[cnt] += a[v], have[cnt] |= bo[v], bel[v] = cnt;
  } while (v != u);
}
long long ff[300005];
inline long long getf(long long x) {
  while (x != ff[x]) x = ff[x] = ff[ff[x]];
  return x;
}
bool dohave[300005];
long long rt, res[300005], dp[300005], sum[300005];
vector<pair<long long, long long> > G[300005];
void dfs1(long long u, long long pa) {
  dohave[u] = have[u];
  sum[u] = val[u];
  for (auto it : G[u]) {
    long long v = it.first, w = it.second;
    if (v == pa) continue;
    dfs1(v, u);
    if (!dohave[v])
      ff[v] = u, sum[u] += sum[v];
    else
      dohave[u] = 1;
  }
}
void dp1(long long u, long long pa) {
  dp[u] = sum[u];
  for (auto it : G[u]) {
    long long v = it.first, w = it.second;
    if (v == pa || !dohave[v]) continue;
    dp1(v, u);
    dp[u] += max(0ll, dp[v] - w);
  }
}
void dp2(long long u, long long pa) {
  res[u] = dp[u];
  for (auto it : G[u]) {
    long long v = it.first, w = it.second;
    if (v == pa || !dohave[v]) continue;
    dp[u] -= max(0ll, dp[v] - w);
    dp[v] += max(0ll, dp[u] - w);
    dp2(v, u);
    dp[v] -= max(0ll, dp[u] - w);
    dp[u] += max(0ll, dp[v] - w);
  }
}
signed main() {
  n = read(), m = read(), k = read();
  for (register long long i = (1); i <= (k); ++i) bo[read()] = 1;
  for (register long long i = (1); i <= (n); ++i) a[i] = read();
  for (register long long i = (1); i <= (m); ++i) w[i] = read();
  for (register long long i = (1); i <= (m); ++i) {
    uu[i] = read(), vv[i] = read();
    e[uu[i]].push_back(vv[i]), e[vv[i]].push_back(uu[i]);
  }
  tarjan(1, 0);
  for (register long long i = (1); i <= (m); ++i) {
    long long u = bel[uu[i]], v = bel[vv[i]], w = ::w[i];
    if (u != v)
      G[u].push_back(make_pair(v, w)), G[v].push_back(make_pair(u, w));
  }
  for (register long long i = (1); i <= (cnt); ++i)
    if (have[i]) rt = i;
  for (register long long i = (1); i <= (cnt); ++i) ff[i] = i;
  dfs1(rt, 0);
  dp1(rt, 0), dp2(rt, 0);
  for (register long long i = (1); i <= (n); ++i)
    printf("%lld ", res[getf(bel[i])]);
  return 0;
}
