#include using namespace std; const int N = 2e5 + 10; int c, T, n, a[N], m; long long dis[N]; int vis[N]; vector > G[N]; using pii = pair; priority_queue, greater > Q; long long dijkstra() { for (int i = 0; i <= n; i++) dis[i] = 1e18, vis[i] = 0; dis[0] = 0; Q.push({0ll, 0}); while (!Q.empty()) { int u = Q.top().second; Q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto it : G[u]) { int v = it.first, w = it.second; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; Q.push({dis[v], v}); } } } return dis[n]; } void solve() { cin >> n >> m >> c; for (int i = 0; i <= n; i++) G[i].clear(); long long sum = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; G[i - 1].push_back({i, a[i]}); G[i].push_back({i - 1, a[i]}); } for (int i = 1, l, r; i <= m; i++) { cin >> l >> r; G[l - 1].push_back({r, c}); G[r].push_back({l - 1, c}); } cout << sum - dijkstra() << '\n'; } int main() { ios :: sync_with_stdio(false); cin.tie(0), cout.tie(0); T = 1; while (T--) solve(); return 0; }