#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2,no-stack-protector,unroll-loops,fast-math")
const long long maxn = 3e5 + 10, maxm = 1e6 + 10, lg = 23, mod = 998244353,
                inf = 1e18;
long long n, m, k, c[maxn], V[maxn], U[maxn], W[maxn], mk[maxn], cnt, mol[maxn];
bool sup[maxn];
vector<long long> g1[maxn], tp, g2[maxn];
vector<pair<long long, long long> > g[maxn];
void pfs(long long v = 1, long long p = 0) {
  mk[v] = 1;
  for (auto u : g1[v]) {
    if (u == p || mk[u] == 2) continue;
    g2[u].push_back(v);
    if (!mk[u]) pfs(u, v);
  }
  mk[v] = 2;
  tp.push_back(v);
}
long long dd[maxn], dp[maxn], cc[maxn], shit[maxn], zs[maxn], ds[maxn];
void gfs(long long v) {
  mk[v] = 1;
  mol[v] = cnt;
  cc[cnt] += c[v];
  ds[cnt] += sup[v];
  for (auto u : g2[v])
    if (!mk[u]) gfs(u);
}
long long upd(long long DP, long long WW, long long SP) {
  return max(DP - ((SP == 0 || SP == k) ? 0 : WW), 0ll);
}
void dfd(long long v = 0, long long p = -1) {
  dd[v] = cc[v];
  zs[v] = ds[v];
  for (auto e : g[v]) {
    long long u = e.first, w = e.second;
    if (u == p) continue;
    dfd(u, v);
    dd[v] += upd(dd[u], w, zs[u]);
    zs[v] += zs[u];
  }
}
void dfu(long long v = 0, long long p = -1, long long sd = 0) {
  sd += cc[v];
  for (auto e : g[v]) {
    long long u = e.first, w = e.second;
    if (u == p) continue;
    sd += upd(dd[u], w, zs[u]);
  }
  dp[v] = sd;
  for (auto e : g[v]) {
    long long u = e.first, w = e.second;
    if (u == p) continue;
    dfu(u, v, upd(sd - upd(dd[u], w, zs[u]), w, k - zs[u]));
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    long long v;
    cin >> v;
    sup[v] = 1;
  }
  for (int i = 1; i <= n; i++) cin >> c[i];
  for (int i = 0; i < m; i++) cin >> W[i];
  for (int i = 0; i < m; i++)
    cin >> V[i] >> U[i], g1[V[i]].push_back(U[i]), g1[U[i]].push_back(V[i]);
  pfs();
  memset(mk, 0, sizeof(mk));
  while (!tp.empty()) {
    long long v = tp.back();
    tp.pop_back();
    if (!mk[v]) gfs(v), cnt++;
  }
  for (int i = 0; i < m; i++) {
    long long v = mol[V[i]], u = mol[U[i]];
    if (v != u) g[v].push_back({u, W[i]}), g[u].push_back({v, W[i]});
  }
  dfd(), dfu();
  for (int i = 1; i <= n; i++) cout << dp[mol[i]] << ' ';
  return 0;
}
