#include <bits/stdc++.h>
using namespace std;
const int maxN = 3e5 + 10;
int n, m, k, cnt, res;
int v[maxN + 1], c[maxN + 1];
int low[maxN + 1], dfn[maxN + 1], bcc[maxN + 1];
int stk[maxN + 1], top, sz[maxN + 1], tw[maxN + 1];
long long val[maxN + 1], f[maxN + 1], ans[maxN + 1];
vector<pair<int, int> > to[maxN + 1], nxt[maxN + 1];
inline int read() {
  int num = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) num = (num << 3) + (num << 1) + (ch ^ 48), ch = getchar();
  return num * f;
}
inline void tarjan(int u, int pa) {
  dfn[u] = low[u] = ++cnt;
  stk[++top] = u;
  for (int i = 0; i < to[u].size(); i++) {
    int v = to[u][i].first;
    if (v == pa) continue;
    if (!dfn[v])
      tarjan(v, u), low[u] = min(low[u], low[v]);
    else if (!bcc[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] == dfn[u]) {
    res++;
    while (stk[top] != u) bcc[stk[top--]] = res;
    bcc[stk[top--]] = res;
  }
}
inline void dfs(int u, int pa) {
  f[u] = val[u];
  for (int i = 0; i < nxt[u].size(); i++) {
    int v = nxt[u][i].first, w = nxt[u][i].second;
    if (v == pa) continue;
    dfs(v, u);
    sz[u] += sz[v];
    f[u] += max(0ll, f[v] - (sz[v] > 0 && sz[v] < k ? w : 0));
  }
}
inline void calc(int u, int pa) {
  for (int i = 0; i < nxt[u].size(); i++) {
    int v = nxt[u][i].first, w = nxt[u][i].second;
    if (v == pa) continue;
    long long tp = ans[u] - max(0ll, f[v] - (sz[v] > 0 && sz[v] < k ? w : 0));
    ans[v] = f[v] + max(0ll, tp - (k - sz[v] > 0 && k - sz[v] < k ? w : 0));
    calc(v, u);
  }
}
int main() {
  n = read(), m = read(), k = read();
  for (int i = 1; i <= k; i++) v[i] = read();
  for (int i = 1; i <= n; i++) c[i] = read();
  for (int i = 1; i <= m; i++) tw[i] = read();
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    to[x].push_back(pair<int, int>(y, tw[i]));
    to[y].push_back(pair<int, int>(x, tw[i]));
  }
  tarjan(1, 0);
  for (int u = 1; u <= n; u++) {
    val[bcc[u]] += c[u];
    for (int i = 0; i < to[u].size(); i++) {
      int v = to[u][i].first, w = to[u][i].second;
      if (bcc[u] != bcc[v]) nxt[bcc[u]].push_back(pair<int, int>(bcc[v], w));
    }
  }
  for (int i = 1; i <= k; i++) sz[bcc[v[i]]]++;
  dfs(1, 0);
  ans[1] = f[1];
  calc(1, 0);
  for (int i = 1; i <= n; i++) printf("%lld%c", ans[bcc[i]], " \n"[i == n]);
  return 0;
}
