#include <bits/stdc++.h>
using namespace std;
const long long N = 3e5 + 20;
long long is_brid[N];
long long c[N], esp[N], cnt_esp[N], edge_cost[N];
vector<array<long long, 3> > adj[N];
vector<array<long long, 2> > new_adj[N];
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  for (long long i = 0; i < k; ++i) {
    long long x;
    cin >> x;
    x--;
    esp[x] = 1;
  }
  for (long long i = 0; i < n; ++i) {
    cin >> c[i];
  }
  for (long long i = 0; i < m; ++i) {
    cin >> edge_cost[i];
  }
  for (long long i = 0; i < m; ++i) {
    long long a, b;
    cin >> a >> b;
    a--;
    b--;
    array<long long, 3> x = {b, i, 0}, y = {a, i, 0};
    adj[a].push_back(x);
    adj[b].push_back(y);
  }
  long long gid = 0;
  vector<pair<long long, long long> > st;
  vector<long long> num(n, -1), low(n, -1), art(n, 0), par(n, -1);
  function<void(long long, bool)> dfs1 = [&](long long u, bool root) {
    num[u] = low[u] = gid++;
    long long child = 0;
    for (auto ar : adj[u]) {
      long long v = ar[0], id = ar[1];
      if (v == par[u]) continue;
      if (num[v] == -1) {
        child++;
        par[v] = u;
        st.push_back(make_pair(u, v));
        dfs1(v, false);
        low[u] = min(low[u], low[v]);
        if (low[v] > num[u]) is_brid[id] = 1;
        if ((root && child > 1) || (!root && low[v] >= num[u])) {
          art[u] = 1;
          vector<pair<long long, long long> > tmp;
          while (st.back() != make_pair(u, v))
            tmp.push_back(st.back()), st.pop_back();
          tmp.push_back(st.back()), st.pop_back();
        }
      } else if (num[v] < num[u]) {
        low[u] = min(low[u], num[v]);
        st.push_back(make_pair(u, v));
      }
    }
  };
  dfs1(0, true);
  gid = -1;
  vector<long long> dp(n, 0);
  vector<array<long long, 3> > to_add;
  vector<long long> vist(n, 0), comp(n, -1);
  function<void(long long)> dfs2 = [&](long long u) {
    vist[u] = 1;
    comp[u] = gid;
    cnt_esp[gid] += esp[u];
    dp[gid] += c[u];
    for (auto ar : adj[u]) {
      long long v = ar[0], id = ar[1];
      if (is_brid[id]) {
        array<long long, 3> x = {gid, comp[v], id};
        if (comp[v] >= 0) to_add.push_back(x);
      } else {
        if (!vist[v]) dfs2(v);
      }
    }
  };
  for (long long i = 0; i < n; ++i) {
    if (!vist[i]) {
      gid++;
      dfs2(i);
    }
  }
  sort(to_add.begin(), to_add.end());
  to_add.erase(unique(to_add.begin(), to_add.end()), to_add.end());
  for (auto ar : to_add) {
    long long u = ar[0], v = ar[1], id = ar[2];
    array<long long, 2> x = {v, id}, y = {u, id};
    new_adj[u].push_back(x);
    new_adj[v].push_back(y);
  }
  function<void(long long, long long)> dfs3 = [&](long long u, long long p) {
    for (auto ar : new_adj[u]) {
      long long v = ar[0], id = ar[1];
      if (v == p) continue;
      dfs3(v, u);
      cnt_esp[u] += cnt_esp[v];
      long long add = 0;
      if (cnt_esp[v] == 0 || cnt_esp[v] == k)
        add = dp[v];
      else
        add = max(dp[v] - edge_cost[id], 0LL);
      dp[u] += add;
    }
  };
  dfs3(0, -1);
  vector<long long> ans(n);
  function<void(long long, long long)> dfs4 = [&](long long u, long long p) {
    ans[u] = dp[u];
    for (auto ar : new_adj[u]) {
      long long v = ar[0], id = ar[1];
      if (v == p) continue;
      long long add = 0;
      if (cnt_esp[v] == 0 || cnt_esp[v] == k)
        add = dp[v];
      else
        add = max(dp[v] - edge_cost[id], 0LL);
      long long dpu = dp[u], dpv = dp[v], cu = cnt_esp[u], cv = cnt_esp[v];
      dp[u] -= add;
      cnt_esp[u] -= cnt_esp[v];
      cnt_esp[v] += cnt_esp[u];
      add = 0;
      if (cnt_esp[u] == 0 || cnt_esp[u] == k)
        add = dp[u];
      else
        add = max(dp[u] - edge_cost[id], 0LL);
      dp[v] += add;
      dfs4(v, u);
      dp[u] = dpu;
      dp[v] = dpv;
      cnt_esp[u] = cu;
      cnt_esp[v] = cv;
    }
  };
  dfs4(0, -1);
  for (long long i = 0; i < n; ++i) {
    cout << ans[comp[i]] << " ";
  }
  cout << '\n';
  return 0;
}
