#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 3e5 + 5;
long long n, m, k;
long long tin[MAXN];
bool visited[MAXN];
long long timer;
long long low[MAXN];
long long cmpnum[MAXN];
long long val[MAXN];
long long c[MAXN];
long long s[MAXN];
pair<long long, long long> edges[MAXN];
long long dp[MAXN];
long long w[MAXN];
bool is_bridge[MAXN];
long long v[MAXN];
long long ans[MAXN];
vector<pair<long long, long long>> v1[MAXN];
vector<pair<long long, long long>> v2[MAXN];
void dfs1(long long curr, long long par) {
  timer++;
  tin[curr] = timer;
  visited[curr] = true;
  low[curr] = timer;
  for (auto x : v1[curr]) {
    long long y = x.first;
    long long ind = x.second;
    if (y == par) {
      continue;
    }
    if (visited[y]) {
      low[curr] = min(low[curr], tin[y]);
    } else {
      dfs1(y, curr);
      low[curr] = min(low[curr], low[y]);
      if (low[y] > tin[curr]) {
        is_bridge[ind] = true;
      }
    }
  }
}
void dfs2(long long curr, long long cmp) {
  cmpnum[curr] = cmp;
  val[cmp] += c[curr];
  s[cmp] += v[curr];
  for (auto x : v1[curr]) {
    long long y = x.first;
    long long ind = x.second;
    if (!is_bridge[ind] && !cmpnum[y]) {
      dfs2(y, cmp);
    }
  }
}
void dfs3(long long curr, long long par) {
  dp[curr] = val[curr];
  for (auto x : v2[curr]) {
    if (x.first != par) {
      dfs3(x.first, curr);
      s[curr] += s[x.first];
      if (s[x.first] == k || s[x.first] == 0) {
        dp[curr] += dp[x.first];
      } else {
        dp[curr] += max(0LL, dp[x.first] - w[x.second]);
      }
    }
  }
}
void dfs4(long long curr, long long par) {
  ans[curr] = dp[curr];
  for (auto x : v2[curr]) {
    if (x.first != par) {
      s[curr] -= s[x.first];
      if (s[x.first] == 0 || s[x.first] == k) {
        dp[curr] -= dp[x.first];
      } else {
        dp[curr] -= max(0LL, dp[x.first] - w[x.second]);
      }
      s[x.first] += s[curr];
      if (s[curr] == 0 || s[curr] == k) {
        dp[x.first] += dp[curr];
      } else {
        dp[x.first] += max(0LL, dp[curr] - w[x.second]);
      }
      dfs4(x.first, curr);
      s[x.first] -= s[curr];
      if (s[curr] == 0 || s[curr] == k) {
        dp[x.first] -= dp[curr];
      } else {
        dp[x.first] -= max(0LL, dp[curr] - w[x.second]);
      }
      s[curr] += s[x.first];
      if (s[x.first] == 0 || s[x.first] == k) {
        dp[curr] += dp[x.first];
      } else {
        dp[curr] += max(0LL, dp[x.first] - w[x.second]);
      }
    }
  }
}
int main() {
  cin >> n >> m >> k;
  for (long long i = 1; i <= k; i++) {
    long long x;
    cin >> x;
    v[x]++;
  }
  for (long long i = 1; i <= n; i++) {
    cin >> c[i];
    tin[i] = -1;
    low[i] = -1;
  }
  for (long long i = 1; i <= m; i++) {
    cin >> w[i];
    is_bridge[i] = false;
  }
  for (long long i = 1; i <= m; i++) {
    long long x, y;
    cin >> x >> y;
    edges[i] = make_pair(x, y);
    v1[x].push_back(make_pair(y, i));
    v1[y].push_back(make_pair(x, i));
  }
  dfs1(1, 1);
  for (long long i = 1; i <= n; i++) {
    visited[i] = false;
  }
  long long tmp = 0;
  for (long long i = 1; i <= n; i++) {
    if (!cmpnum[i]) {
      tmp++;
      dfs2(i, tmp);
    }
  }
  for (long long i = 1; i <= m; i++) {
    if (is_bridge[i]) {
      v2[cmpnum[edges[i].first]].push_back(
          make_pair(cmpnum[edges[i].second], i));
      v2[cmpnum[edges[i].second]].push_back(
          make_pair(cmpnum[edges[i].first], i));
    }
  }
  dfs3(1, 1);
  dfs4(1, 1);
  for (long long i = 1; i <= n; i++) {
    cout << ans[cmpnum[i]] << " ";
  }
}
