#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300300;
int n, m, k, c[MAXN], w[MAXN];
bool special[MAXN];
int uf[MAXN];
vector<int> comp[MAXN];
inline int find(int x) { return (uf[x] ? uf[x] = find(uf[x]) : x); }
void join(int x, int y) {
  if ((x = find(x)) == (y = find(y))) return;
  if (comp[x].size() < comp[y].size()) swap(x, y);
  uf[y] = x;
  comp[x].emplace_back(y);
  comp[x].insert(comp[x].end(), comp[y].begin(), comp[y].end());
}
vector<pair<int, int>> g[MAXN];
bool vis[MAXN];
int tin[MAXN], tmin[MAXN], curt = 0;
void dfs(int v, int p = -1) {
  vis[v] = true;
  tin[v] = tmin[v] = ++curt;
  for (const auto &[u, id] : g[v]) {
    if (!vis[u]) {
      dfs(u, v);
      tmin[v] = min(tmin[v], tmin[u]);
      if (tmin[u] <= tin[v]) join(v, u);
    } else if (u != p)
      tmin[v] = min(tmin[v], tin[u]);
  }
}
vector<pair<int, int>> cg[MAXN];
bool cspecial[MAXN];
int cspeccnt;
long long ans[MAXN];
long long cc[MAXN];
pair<long long, int> f[MAXN];
pair<long long, int> dfs2(int v, int p = -1) {
  long long ret = cc[v];
  int x = cspecial[v];
  for (const auto &[u, id] : cg[v])
    if (u != p) {
      const auto &[a, b] = dfs2(u, v);
      if (b == 0 or b == cspeccnt)
        ret += a;
      else
        ret += max(0LL, a - w[id]);
      x += b;
    }
  return f[v] = make_pair(ret, x);
}
void dfs3(int v, int p = -1, long long k = 0, int id = 0) {
  ans[v] = f[v].first;
  long long con;
  if (f[v].second == 0 || f[v].second == cspeccnt)
    con = k;
  else
    con = max(0LL, k - w[id]);
  ans[v] += con;
  for (const auto &[u, id] : cg[v])
    if (u != p) {
      long long temp = con + f[v].first;
      const auto &[a, b] = f[u];
      if (b == 0 or b == cspeccnt)
        temp -= a;
      else
        temp -= max(0LL, a - w[id]);
      dfs3(u, v, temp, id);
    }
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 1, x; i <= k; ++i) scanf("%d", &x), special[x] = true;
  for (int i = 1; i <= n; ++i) scanf("%d", &c[i]);
  for (int i = 1; i <= m; ++i) scanf("%d", &w[i]);
  for (int i = 1, u, v; i <= m; ++i) {
    scanf("%d %d", &u, &v);
    g[u].emplace_back(v, i), g[v].emplace_back(u, i);
  }
  dfs(1);
  for (int i = 1; i <= n; ++i) {
    for (const auto &[u, id] : g[i])
      if (find(i) != find(u)) cg[find(i)].emplace_back(find(u), id);
    if (special[i] and not cspecial[find(i)]) cspeccnt++;
    cspecial[find(i)] |= special[i];
    cc[find(i)] += c[i];
  }
  dfs2(find(1));
  dfs3(find(1));
  for (int i = 1; i <= n; ++i) printf("%lld ", ans[find(i)]);
}
