#include using namespace std; const int N=2e5+5; using ll=long long; const ll inf=1e18; int c,T,n,m,a[N]; ll sum,dis[N]; bool vis[N]; vector>e[N]; struct node{ int id;ll d; bool operator<(const node &b)const{return d>b.d;} }tmp; priority_queuepq; int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); // freopen("card.in","r",stdin); // freopen("card.out","w",stdout); T=1; while(T--) { cin>>n>>m>>c,sum=0; for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i]; for(int i=0;i<=n;i++)e[i].clear(),dis[i]=inf,vis[i]=0; for(int i=1;i<=n;i++) { e[i-1].emplace_back(i,a[i]); e[i].emplace_back(i-1,a[i]); } for(int i=1;i<=m;i++) { int l,r,w=c; cin>>l>>r; e[l-1].emplace_back(r,w); e[r].emplace_back(l-1,w); } dis[0]=0,pq.emplace((node){0,0}); while(!pq.empty()) { tmp=pq.top();pq.pop(); int x=tmp.id; if(vis[x])continue; vis[x]=1; for(auto y:e[x])if(dis[x]+y.second