#include <bits/stdc++.h>
const int MAXN = 300000;
const int MAXM = 300000;
int N, M, K;
int C[MAXN + 5];
bool S[MAXN + 5];
std::vector<int> G[MAXN + 5];
std::vector<std::pair<int, int> > H[MAXN + 5];
struct Edge {
  int u, v, w;
} E[MAXM + 5];
std::stack<int> Stk;
int Low[MAXN + 5], Dfn[MAXN + 5], DfnCnt;
int BlkCnt, Bel[MAXN + 5], Spc[MAXN + 5];
long long Val[MAXN + 5];
void Tarjan(int u, int f) {
  Stk.push(u);
  Low[u] = Dfn[u] = ++DfnCnt;
  for (int i = 0; i < (int)G[u].size(); i++) {
    int v = G[u][i];
    if (v != f) {
      if (!Dfn[v]) {
        Tarjan(v, u);
        Low[u] = std::min(Low[u], Low[v]);
      } else
        Low[u] = std::min(Low[u], Dfn[v]);
    }
  }
  if (Low[u] == Dfn[u]) {
    int v;
    ++BlkCnt;
    do {
      Bel[v = Stk.top()] = BlkCnt, Stk.pop();
      Spc[BlkCnt] |= S[v], Val[BlkCnt] += C[v];
    } while (v != u);
  }
}
int Par[MAXN + 5];
int Find(int u) { return Par[u] == u ? u : (Par[u] = Find(Par[u])); }
int Num[MAXN + 5];
long long Dp[MAXN + 5], Sum[MAXN + 5], Ans[MAXN + 5];
void Init(int u, int f) {
  Num[u] = Spc[u], Sum[u] = Val[u];
  for (int i = 0; i < (int)H[u].size(); i++) {
    int v = H[u][i].first;
    if (v != f) {
      Init(v, u);
      Num[u] += Num[v];
      if (!Num[v]) {
        Par[v] = u;
        Sum[u] += Sum[v];
      }
    }
  }
}
void Dfs1(int u, int f) {
  Dp[u] = Sum[u];
  for (int i = 0; i < (int)H[u].size(); i++) {
    int v = H[u][i].first, w = H[u][i].second;
    if (v != f && Num[v]) {
      Dfs1(v, u);
      Dp[u] += std::max(Dp[v] - w, 0ll);
    }
  }
}
void Dfs2(int u, int f) {
  Ans[u] = Dp[u];
  for (int i = 0; i < (int)H[u].size(); i++) {
    int v = H[u][i].first, w = H[u][i].second;
    if (v != f && Num[v]) {
      Dp[u] -= std::max(Dp[v] - w, 0ll);
      Dp[v] += std::max(Dp[u] - w, 0ll);
      Dfs2(v, u);
      Dp[v] -= std::max(Dp[u] - w, 0ll);
      Dp[u] += std::max(Dp[v] - w, 0ll);
    }
  }
}
int main() {
  scanf("%d%d%d", &N, &M, &K);
  for (int i = 1; i <= K; i++) {
    int u;
    scanf("%d", &u);
    S[u] = true;
  }
  for (int i = 1; i <= N; i++) scanf("%d", &C[i]);
  for (int i = 1; i <= M; i++) scanf("%d", &E[i].w);
  for (int i = 1; i <= M; i++) {
    scanf("%d%d", &E[i].u, &E[i].v);
    G[E[i].u].push_back(E[i].v);
    G[E[i].v].push_back(E[i].u);
  }
  Tarjan(1, 0);
  for (int i = 1; i <= M; i++) {
    int u = Bel[E[i].u], v = Bel[E[i].v], w = E[i].w;
    if (u != v) {
      H[u].push_back(std::make_pair(v, w));
      H[v].push_back(std::make_pair(u, w));
    }
  }
  int r = 0;
  for (int i = 1; i <= BlkCnt; i++)
    if (Spc[i]) r = i;
  for (int i = 1; i <= BlkCnt; i++) Par[i] = i;
  Init(r, 0);
  Dfs1(r, 0);
  Dfs2(r, 0);
  for (int i = 1; i <= N; i++) printf("%lld ", Ans[Find(Bel[i])]);
  return 0;
}
