#include using namespace std; using lint = long long; template using V = vector; template using VV = V< V >; struct Edge { int to, cost; }; template V dijkstra(const VV& g, int s = 0) { V dist(g.size(), numeric_limits::max()); using P = pair; priority_queue< P, V

, greater

> pque; pque.emplace(dist[s] = 0, s); while (!pque.empty()) { T d; int v; tie(d, v) = pque.top(); pque.pop(); if (d > dist[v]) continue; for (const auto& e : g[v]) if (dist[v] + e.cost < dist[e.to]) { pque.emplace(dist[e.to] = dist[v] + e.cost, e.to); } } return dist; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int x, y, z; cin >> x >> y >> z; V c(2); V<> v(2); for (int i = 0; i < 2; ++i) cin >> c[i] >> v[i]; VV g(8); auto add_edge = [&](int u, int v, int c) -> void { g[u].emplace_back(Edge{v, c}); g[v].emplace_back(Edge{u, c}); }; add_edge(0, 1, x - 1); add_edge(2, 3, y - 1); add_edge(4, 5, z - 1); add_edge(0, 2, 1), add_edge(0, 4, 1), add_edge(2, 4, 1); add_edge(1, 3, 1), add_edge(1, 5, 1), add_edge(3, 5, 1); for (int i = 0; i < 2; ++i) { if (c[i] == 'A') { add_edge(0, 6 + i, v[i] - 1); add_edge(6 + i, 1, x - v[i]); } else if (c[i] == 'B') { add_edge(2, 6 + i, v[i] - 1); add_edge(6 + i, 3, y - v[i]); } else { add_edge(4, 6 + i, v[i] - 1); add_edge(6 + i, 5, z - v[i]); } } if (c[0] == c[1]) { add_edge(6, 7, abs(v[0] - v[1])); } cout << dijkstra(g, 6)[7] << '\n'; }