#include <bits/stdc++.h>
using namespace std;
const long long N = 3e5 + 5;
long long dp[N];
long long cost[N];
long long profit[N];
long long pro[N];
vector<pair<long long, long long>> graph[N];
vector<pair<long long, long long>> adj[N];
bool special[N];
vector<long long> topol;
vector<pair<long long, long long>> dag[N];
vector<pair<long long, long long>> rev[N];
long long col[N], in_degree[N], out_degree[N];
bool seen[N];
long long n, m, k;
bool mark[N];
long long num[N];
long long cnt[N];
long long dp2[N];
long long ans[N];
void input() {
  cin >> n >> m >> k;
  for (long long i = 0; i < k; i++) {
    long long tmp;
    cin >> tmp;
    tmp--;
    special[tmp] = true;
  }
  for (long long i = 0; i < n; i++) {
    cin >> profit[i];
  }
  for (long long i = 0; i < m; i++) {
    cin >> cost[i];
  }
  for (long long i = 0; i < m; i++) {
    long long u, v;
    cin >> u >> v;
    graph[u - 1].push_back({v - 1, cost[i]});
    graph[v - 1].push_back({u - 1, cost[i]});
  }
}
void pre(long long v, long long par = -1) {
  seen[v] = true;
  for (auto nei : graph[v]) {
    if (seen[nei.first] && nei.first != par) {
      adj[v].push_back(nei);
      rev[nei.first].push_back({v, nei.second});
    }
    if (!seen[nei.first]) {
      adj[v].push_back(nei);
      rev[nei.first].push_back({v, nei.second});
      pre(nei.first, v);
    }
  }
}
void sfd(long long v, long long c) {
  col[v] = c;
  pro[c] += profit[v];
  if (special[v]) {
    num[c]++;
  }
  mark[v] = true;
  for (auto nei : rev[v]) {
    long long u = nei.first;
    if (!mark[u]) {
      sfd(u, c);
    }
  }
}
void dfs(long long v) {
  mark[v] = true;
  for (auto nei : adj[v]) {
    long long u = nei.first;
    if (!mark[u]) {
      dfs(u);
    }
  }
  topol.push_back(v);
}
void make_dag() {
  for (long long i = 0; i < n; i++) {
    for (auto nei : adj[i]) {
      long long v = nei.first;
      if (col[v] != col[i]) {
        dag[col[i]].push_back({col[v], nei.second});
        dag[col[v]].push_back({col[i], nei.second});
      }
    }
  }
}
void dfs1(long long v, long long par = -1) {
  dp[v] += pro[v];
  cnt[v] = num[v];
  for (auto nei : dag[v]) {
    long long u = nei.first;
    long long w = nei.second;
    if (u != par) {
      dfs1(u, v);
      long long tmp = dp[u];
      if (cnt[u] > 0 && cnt[u] < k) {
        tmp = max(0ll, dp[u] - w);
      }
      dp[v] += tmp;
      cnt[v] += cnt[u];
    }
  }
}
void dfs2(long long v, long long par = -1) {
  ans[v] = dp2[v];
  for (auto nei : dag[v]) {
    long long u = nei.first;
    long long w = nei.second;
    if (u != par) {
      long long tmp = dp2[u];
      if (cnt[u] > 0 && cnt[u] < k) {
        tmp = max(0ll, dp2[u] - w);
      }
      dp2[v] -= tmp;
      cnt[v] -= cnt[u];
      tmp = dp2[v];
      if (cnt[v] > 0 && cnt[v] < k) {
        tmp = max(0ll, dp2[v] - w);
      }
      dp2[u] += tmp;
      cnt[u] += cnt[v];
      dfs2(u, v);
      tmp = dp2[v];
      if (cnt[v] > 0 && cnt[v] < k) {
        tmp = max(0ll, dp2[v] - w);
      }
      dp2[u] -= tmp;
      cnt[u] -= cnt[v];
      tmp = dp2[u];
      if (cnt[u] > 0 && cnt[u] < k) {
        tmp = max(0ll, dp2[u] - w);
      }
      dp2[v] += tmp;
      cnt[v] += cnt[u];
    }
  }
}
int main() {
  input();
  pre(0);
  for (long long i = 0; i < n; i++) {
    if (!mark[i]) {
      dfs(i);
    }
  }
  reverse(topol.begin(), topol.end());
  memset(mark, 0, sizeof mark);
  long long cmp_cnt = 0;
  for (auto v : topol) {
    if (!mark[v]) {
      sfd(v, cmp_cnt++);
    }
  }
  make_dag();
  dfs1(0);
  for (long long i = 0; i < n; i++) {
    dp2[i] = dp[i];
  }
  dfs2(0);
  for (long long i = 0; i < n; i++) {
    cout << ans[col[i]] << " ";
  }
}
