#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300100;
vector<long long> gi[MAXN], vec;
vector<pair<long long, long long>> g[MAXN], grafo[MAXN];
long long vis[MAXN], niv[MAXN];
long long v[MAXN], c[MAXN], a[MAXN], t[MAXN];
long long comp[MAXN];
void dfs(long long x, long long p) {
  vis[x] = true;
  vec.push_back(x);
  for (auto i : g[x]) {
    if (i.first == p) continue;
    if (vis[i.first] == true) {
      if (niv[x] < niv[i.first]) gi[x].push_back(i.first);
      continue;
    }
    gi[i.first].push_back(x);
    niv[i.first] = niv[x] + 1;
    dfs(i.first, x);
  }
}
void dfs2(long long x, long long root) {
  vis[x] = true;
  comp[x] = root;
  for (auto i : gi[x]) {
    if (vis[i] == true) continue;
    dfs2(i, root);
  }
}
long long sub[MAXN], resp[MAXN], esp[MAXN];
void solve(long long x, long long p) {
  sub[x] = t[x];
  for (auto i : grafo[x]) {
    if (i.first == p) continue;
    solve(i.first, x);
    esp[x] += esp[i.first];
    long long h;
    if (esp[i.first] == 0)
      h = sub[i.first];
    else
      h = sub[i.first] - i.second;
    if (h >= 0) sub[x] += h;
  }
}
void solve2(long long x, long long p, long long rp) {
  resp[x] = rp + sub[x];
  long long soma = resp[x];
  for (auto i : grafo[x]) {
    if (i.first == p) continue;
    long long h = sub[i.first] - i.second;
    if (h >= 0 || esp[i.first] == 0)
      solve2(i.first, x, max(soma - h - i.second, (long long)0));
    else
      solve2(i.first, x, max(soma - i.second, (long long)0));
  }
}
signed main() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long o;
  for (long long i = 1; i <= k; i++) {
    long long x;
    cin >> x;
    v[x] = 1;
    o = x;
  }
  for (long long i = 1; i <= n; i++) cin >> c[i];
  for (long long i = 1; i <= m; i++) cin >> a[i];
  for (long long i = 1; i <= m; i++) {
    long long x, y;
    cin >> x >> y;
    g[x].push_back({y, a[i]});
    g[y].push_back({x, a[i]});
  }
  niv[1] = 0;
  dfs(1, 1);
  memset(vis, false, sizeof vis);
  for (auto i : vec) {
    if (vis[i] == false) dfs2(i, i);
  }
  for (long long i = 1; i <= n; i++) {
    t[comp[i]] += c[i];
    if (v[i] == 1) esp[comp[i]] += 1;
    for (auto j : g[i]) {
      if (comp[j.first] == comp[i]) continue;
      grafo[comp[i]].push_back({comp[j.first], j.second});
    }
  }
  o = comp[o];
  solve(o, o);
  solve2(o, o, 0);
  for (long long i = 1; i <= n; i++) cout << resp[comp[i]] << " ";
  cout << endl;
}
