#include <bits/stdc++.h>
const int mod = 1e9 + 7;
const int maxn = 2e5 + 6;
const double eps = 1e-6;
using namespace std;
bool eq(const double &a, const double &b) { return fabs(a - b) < eps; }
bool ls(const double &a, const double &b) { return a + eps < b; }
bool le(const double &a, const double &b) { return eq(a, b) || ls(a, b); }
long long gcd(long long a, long long b) { return a == 0 ? b : gcd(b % a, a); };
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long kpow(long long a, long long b) {
  long long res = 1;
  a %= mod;
  if (b < 0) return 1;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, m;
int v[maxn];
long long dis[maxn];
long long a[maxn];
vector<pair<long long, int> > G[maxn];
void dij() {
  memset(v, false, sizeof(v));
  priority_queue<pair<long long, int>, vector<pair<long long, int> >,
                 greater<pair<long long, int> > >
      q;
  while (q.size()) q.pop();
  for (int i = 1; i < (n + 1); ++i)
    dis[i] = 1e18 + 9, G[n + 1].push_back(make_pair(a[i], i));
  q.push(make_pair(0, n + 1));
  while (!q.empty()) {
    pair<long long, int> u = q.top();
    q.pop();
    if (v[u.second]) continue;
    v[u.second] = 1;
    for (int j = 0; j < (G[u.second].size()); ++j) {
      int vs = G[u.second][j].second;
      int us = u.second;
      if (!v[vs] && dis[vs] > G[u.second][j].first + dis[us]) {
        dis[vs] = G[u.second][j].first + dis[us];
        q.push(make_pair(dis[vs], vs));
      }
    }
  }
  for (int i = 1; i < (n + 1); ++i) printf("%lld%c", dis[i], " \n"[i == n]);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < (m); ++i) {
    int u, v;
    long long c;
    scanf("%d%d%lld", &u, &v, &c);
    G[u].push_back(make_pair(2 * c, v));
    G[v].push_back(make_pair(2 * c, u));
  }
  for (int i = 1; i < (n + 1); ++i) scanf("%lld", &a[i]);
  dij();
  return 0;
}
