#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define lg length()
#define pb push_back
#define INF 1000000005
#define LINF 1000000000000000005
#define all(x) (x).begin(), (x).end()
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r){
    return uniform_int_distribution<int>(l,r)(rng);
}


int n,m,u,v;

ll a[300005],x,sum,vz[300005],d[300005];

vector <int> ans1, ans2;

vector <pii> g[300005],h[300005];

void DFS(int nod){
    vz[nod] = 1;
    for(pii i : g[nod]){
        if(vz[i.x]) continue;
        d[i.x]++;
        d[nod]++;
        DFS(i.x);
        h[i.x].pb({nod, i.y});
        h[nod].pb({i.x, i.y});
    }
}

int32_t main(){
    ios_base :: sync_with_stdio(0); cin.tie(); cout.tie();
#ifdef LOCAL_DEFINE
    ifstream cin("input.txt");
#endif

    cin >> n >> m >> x;
    for(int i=1;i<=n;i++) cin >> a[i], sum += a[i];
    if(sum < x*(n-1)){
        cout << "NO";
        return 0;
    }
    cout << "YES\n";
    for(int i=1;i<=m;i++){
        cin >> u >> v;
        g[u].pb({v,i});
        g[v].pb({u,i});
    }

    DFS(1);
    stack <int> l;
    for(int i=1;i<=n;i++){
        if(d[i]==1) l.push(i);
        vz[i] = 0;
    }
    while(sz(l)){
        int t = l.top();
        l.pop();
        vz[t] = 1;
        for(pii i : h[t]){
            if(!vz[i.x]){
                if(a[t]>=x) ans1.push_back(i.y), a[i.x]+=a[t]-x;
                else ans2.push_back(i.y);
                d[i.x]--;
                if(d[i.x]==1) l.push(i.x);
            }
        }
    }
    for(int i : ans1) cout << i << '\n';
    reverse(ans2.begin(),ans2.end());
    for(int i : ans2) cout << i << '\n';
}
