#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
long long maxn = 3e5;
vector<long long> c(maxn), w(maxn), cc(maxn);
vector<vector<pair<long long, long long>>> g(maxn);
vector<vector<long long>> gg(maxn);
vector<long long> color(maxn, -1), ncol(maxn);
vector<char> used1(maxn);
vector<long long> fl(maxn), nfl(maxn);
vector<long long> h(maxn), fup(maxn), cnt(maxn);
vector<vector<pair<long long, long long>>> br(maxn);
vector<vector<pair<long long, long long>>> ng(maxn), lg(maxn);
vector<long long> dp(maxn), ans(maxn);
void find_br(long long v = 0, long long p = -1, long long ind = -1,
             long long depth = 0) {
  h[v] = depth;
  used1[v] = true;
  fup[v] = depth;
  for (auto to : g[v]) {
    long long u = to.first;
    if (u != p) {
      if (!used1[u]) {
        find_br(u, v, to.second, depth + 1);
        fup[v] = min(fup[u], fup[v]);
      } else {
        fup[v] = min(fup[v], h[u]);
      }
    }
  }
  if (p == -1) return;
  if (fup[v] > h[p]) {
    br[p].emplace_back(v, ind);
    br[v].emplace_back(p, ind);
  } else {
    gg[p].push_back(v);
    gg[v].push_back(p);
  }
  return;
}
void make_comp(long long v, long long col) {
  color[v] = col;
  for (auto to : gg[v]) {
    if (color[to] == -1) {
      make_comp(to, col);
    }
  }
  return;
}
void init(long long v = 0, long long p = -1) {
  cnt[v] = nfl[v];
  dp[v] = cc[v];
  for (auto u : ng[v]) {
    long long to = u.first;
    if (to != p) {
      init(to, v);
      cnt[v] += cnt[to];
      if (cnt[to] == 0 || cnt[to] == k) {
        dp[v] += dp[to];
      } else {
        dp[v] += max((long long)0, dp[to] - w[u.second]);
      }
    }
  }
  return;
}
void dfs(long long v = 0, long long p = -1) {
  ans[v] = dp[v];
  for (auto u : ng[v]) {
    long long to = u.first;
    if (to != p) {
      if (cnt[to] == 0 || cnt[to] == k)
        dp[v] -= dp[to];
      else
        dp[v] -= max((long long)0, dp[to] - w[u.second]);
      cnt[v] -= cnt[to];
      cnt[to] += cnt[v];
      if (cnt[v] == 0 || cnt[v] == k)
        dp[to] += dp[v];
      else
        dp[to] += max((long long)0, dp[v] - w[u.second]);
      dfs(to, v);
      if (cnt[v] == 0 || cnt[v] == k)
        dp[to] -= dp[v];
      else
        dp[to] -= max((long long)0, dp[v] - w[u.second]);
      cnt[to] -= cnt[v];
      cnt[v] += cnt[to];
      if (cnt[to] == 0 || cnt[to] == k)
        dp[v] += dp[to];
      else
        dp[v] += max((long long)0, dp[to] - w[u.second]);
    }
  }
  return;
}
int32_t main() {
  cin >> n >> m >> k;
  for (long long i = 0; i < k; i++) {
    long long x;
    cin >> x;
    x--;
    fl[x] = true;
  }
  for (long long i = 0; i < n; i++) cin >> c[i];
  for (long long i = 0; i < m; i++) cin >> w[i];
  for (long long i = 0; i < m; i++) {
    long long x, y;
    cin >> x >> y;
    x--;
    y--;
    g[x].emplace_back(y, i);
    g[y].emplace_back(x, i);
  }
  find_br();
  long long col = 0;
  for (long long i = 0; i < n; i++) {
    if (color[i] == -1) {
      make_comp(i, col);
      col++;
    }
  }
  for (long long i = 0; i < n; i++) {
    cc[color[i]] += c[i];
    if (fl[i]) nfl[color[i]]++;
  }
  for (long long i = 0; i < n; i++) {
    for (auto to : br[i]) {
      ng[color[i]].emplace_back(color[to.first], to.second);
    }
  }
  init();
  dfs();
  for (long long i = 0; i < n; i++) {
    cout << ans[color[i]] << " ";
  }
  cout << endl;
  return 0;
}
