#include <bits/stdc++.h>
using namespace std;
bool visited[100001] = {false};
vector<long long int> t1;
vector<long long int> t2;
vector<long long int> t3;
long long int lc = 0;
void dfs(long long int x, vector<long long int> adj[]) {
  if (visited[x]) {
    return;
  } else {
    visited[x] = true;
    lc++;
    if ((lc - 1) % 3 == 0) {
      t1.push_back(x);
    } else if ((lc - 1) % 3 == 1) {
      t2.push_back(x);
    } else {
      t3.push_back(x);
    }
    for (auto u : adj[x]) {
      dfs(u, adj);
    }
  }
}
int main() {
  long long int n, i, u, v;
  cin >> n;
  long long int c1[n], c2[n], c3[n];
  vector<long long int> adj[n];
  long long int bc = 0;
  for (i = 0; i < n; i++) cin >> c1[i];
  for (i = 0; i < n; i++) cin >> c2[i];
  for (i = 0; i < n; i++) cin >> c3[i];
  for (i = 0; i < n - 1; i++) {
    cin >> u >> v;
    adj[u - 1].push_back(v - 1);
    adj[v - 1].push_back(u - 1);
    if (adj[u - 1].size() == 3 || adj[v - 1].size() == 3) {
      bc = -1;
    }
  }
  if (bc == -1) {
    cout << -1 << endl;
  } else {
    for (i = 0; i < n; i++) {
      if (adj[i].size() == 1) {
        dfs(i, adj);
        break;
      }
    }
    long long int ans = 0;
    for (i = 0; i < t1.size(); i++) {
      ans += c1[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      ans += c2[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      ans += c3[t3[i]];
    }
    long long int m123 = ans;
    long long int co = 0;
    for (i = 0; i < t1.size(); i++) {
      co += c1[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      co += c3[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      co += c2[t3[i]];
    }
    long long int m132 = co;
    ans = min(ans, co);
    co = 0;
    for (i = 0; i < t1.size(); i++) {
      co += c2[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      co += c3[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      co += c1[t3[i]];
    }
    long long int m231 = co;
    ans = min(ans, co);
    co = 0;
    for (i = 0; i < t1.size(); i++) {
      co += c2[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      co += c1[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      co += c3[t3[i]];
    }
    long long int m213 = co;
    ans = min(ans, co);
    co = 0;
    for (i = 0; i < t1.size(); i++) {
      co += c3[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      co += c2[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      co += c1[t3[i]];
    }
    long long int m321 = co;
    ans = min(ans, co);
    co = 0;
    for (i = 0; i < t1.size(); i++) {
      co += c3[t1[i]];
    }
    for (i = 0; i < t2.size(); i++) {
      co += c1[t2[i]];
    }
    for (i = 0; i < t3.size(); i++) {
      co += c2[t3[i]];
    }
    long long int m312 = co;
    ans = min(ans, co);
    cout << ans << endl;
    long long int colors[n];
    if (m123 == ans) {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 1;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 2;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 3;
      }
    } else if (m132 == ans) {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 1;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 3;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 2;
      }
    } else if (m231 == ans) {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 2;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 3;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 1;
      }
    } else if (m213 == ans) {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 2;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 1;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 3;
      }
    } else if (m312 == ans) {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 3;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 1;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 2;
      }
    } else {
      for (i = 0; i < t1.size(); i++) {
        colors[t1[i]] = 3;
      }
      for (i = 0; i < t2.size(); i++) {
        colors[t2[i]] = 2;
      }
      for (i = 0; i < t3.size(); i++) {
        colors[t3[i]] = 1;
      }
    }
    for (i = 0; i < n; i++) {
      cout << colors[i] << " ";
    }
  }
  return 0;
}
