2 1
1 1
2 1
 8 12
-6 2 -3 2 6 -7 1 -5
2 1
5 6
1 6
1 4
8 2
2 7
2 5
8 3
8 4
3 7
7 6
3 1
 10 13
3 4 -3 8 6 4 -5 1 3 -7
9 5
9 2
10 3
1 4
3 5
9 1
6 10
10 4
3 1
2 7
1 6
1 7
7 8
 43 52
-23 -18 -35 21 -12 38 -35 -11 28 -20 27 -5 9 -19 -39 -25 -32 32 -36 28 11 37 1 -25 -22 9 -15 21 25 -39 10 36 -30 -40 22 26 25 -27 -22 -38 -1 18 -13
33 40
31 23
30 26
21 17
6 2
41 19
32 39
32 23
13 14
25 35
31 30
19 32
25 22
34 36
7 40
23 6
40 12
1 3
23 43
36 13
18 33
17 32
7 3
21 34
41 35
20 7
23 1
41 8
25 19
20 29
42 5
40 21
9 37
17 41
30 10
41 18
39 1
20 24
20 4
42 3
20 25
5 16
31 9
42 28
10 11
19 42
31 38
25 2
31 27
17 25
13 15
31 20
 2 1
1 1
1 2
 5 7
4 1 5 3 -1
2 4
5 4
5 2
1 5
1 2
4 1
1 3
 10 12
5 1 1 8 -8 10 -3 -2 1 7
5 3
8 2
10 9
4 6
5 6
4 5
5 10
4 7
8 4
3 1
3 6
6 10
 20 40
-9 -10 -9 15 -3 -5 -17 -10 -6 2 -13 19 10 -15 15 -14 17 0 7 -8
3 17
6 18
15 12
2 5
18 3
16 20
6 17
20 10
10 18
9 12
15 3
6 4
15 16
20 6
20 9
9 4
4 8
14 5
11 7
12 11
3 13
14 19
7 17
16 14
19 7
12 13
14 13
13 11
9 14
13 17
8 19
5 20
2 17
2 16
12 5
8 1
20 3
6 2
5 18
13 8

YES
                                                               1
 NO
 YES
                                                              -7
                                                              10
                                                             -16
                                                               3
                                                              13
                                                               0
                                                               4
                                                               5
                                                               0
                                                              -6
                                                               0
                                                               0
                                                               1
 NO
 YES
                                                               1
 YES
                                                               2
                                                               1
                                                              -1
                                                              -1
                                                               0
                                                               0
                                                               5
 YES
-4
1
1
17
-7
-3
6
-3
-3
5
0
0
 YES
                                                             -30
                                                             -21
                                                             -23
                                                             -10
                                                              21
                                                             -52
                                                               0
                                                               2
                                                               0
                                                              -9
                                                               0
                                                              16
                                                              38
                                                               0
                                                              42
                                                               0
                                                              -1
                                                               7
                                                             -64
                                                              51
                                                               0
                                                               7
                                                              47
                                                               0
                                                               0
                                                               0
                                                              10
                                                               0
                                                             -39
                                                               0
                                                               0
                                                               0
                                                               0
                                                               0
                                                               0
                                                              -9
                                                               0
                                                               0
                                                               0
                                                               0


#include<bits/stdc++.h>
using namespace std;
#define db(x){if(cond)cerr<<__LINE__<<" "<<#x<<" " <<x<<endl;}
#define rep(i,b)for(auto i=(0);i<(b);++i)
#define fo(i,a,b)for(auto i=(a);i<=(b);++i)
#define ford(i,a,b)for(auto i=(a);i>=(b);--i)
#define all(x) (x).begin(),(x).end()
#define vv vector
#define pb push_back
template<typename X>void MA(X&a,X b){a=max(a,b);}template<typename X>void MI(X&a,X b){a=min(a,b);}
template<typename X>void clr(X&x,int a){memset(x,a,sizeof(a));};typedef long long ll;typedef long double ld;
typedef array<int,2>i2;typedef vv<int>vi;int cond=0,multi=0,gcj=0;

struct solver_t;solver_t *solver;
struct solver_t{
  vi COST;

  vv<vi>EDG;

  struct edge_t{
    int from,to;
    int cost=0;
    int other(int u){return u^from^to;}
  };
  vv<edge_t>EDGES;
  vi VIS,DST,PARENT;



  vi ORD_KR;
  vi ZB[2];

  int dfs(int u,int prev,int dst){
    PARENT[u]=prev;
    db(u);
    VIS[u]=1; DST[u]=dst;
    for(int e:EDG[u]){
      int v=EDGES[e].other(u);
      if(v!=prev){
        if(VIS[v]==0){
          dfs(v,u,dst+1);
          ORD_KR.pb(e);
        }
        if(VIS[v]==1){
          if(DST[v]%2==DST[u]%2) ZB[DST[v]%2].pb(e);
        }
      }
    }
    return 0;
  }

  void solve(){
    int N,M;cin>>N>>M;
    EDGES.reserve(M);
    COST.resize(N); EDG.resize(N);
    DST.resize(N);
    VIS.resize(N);PARENT.resize(N);

    rep(i,N)cin>>COST[i];
    vi ORG_COST = COST;

    rep(i,M){int a,b;cin>>a>>b;
      a--;b--;
      db(a<<" "<<b);
      EDG[a].pb(EDGES.size());
      EDG[b].pb(EDGES.size());
      EDGES.pb({a,b});
    }
    dfs(0,-1,1);
    rep(i,N)assert(VIS[i]);
    ll COL[2]={};

    rep(i,N)COST[i]-=EDG[i].size();
    rep(i,M)EDGES[i].cost++;

    rep(i,N)db(i+1<<" "<<DST[i]<<" "<<COST[i]);
    rep(i,N)COL[DST[i]%2]+=COST[i];

    db(COL[0]-COL[1]);
    rep(zb,2){
      int diff=COL[zb]-COL[1-zb];
      assert(diff%2==0);
      for(int e:ZB[zb]){
        EDGES[e].cost += diff/2;
        auto edg=EDGES[e];
        COST[edg.from] -= diff/2;
        COST[edg.to] -= diff/2;
        COL[zb]-=diff;

        break;
      }
    }
    if(COL[0]!=COL[1]){
      cout<<"NO\n";
      return;
    }
    cout<<"YES\n";
    for(int e:ORD_KR){
      int a=EDGES[e].from,b=EDGES[e].to;
      if(!(DST[a]>DST[b]))swap(a,b);


      int c=COST[a];
      EDGES[e].cost+=c;
      COST[a]-=c;
      COST[b]-=c;
    }
    assert(COST[0]==0);
    rep(e,M){
      cout<<EDGES[e].cost<<"\n";
    }
    rep(e,M){
      int a=EDGES[e].from,b=EDGES[e].to;
      int c=EDGES[e].cost;
      ORG_COST[a]-=c;
      ORG_COST[b]-=c;
    }
    if(cond){rep(i,N)cout<<ORG_COST[i]<<" ";cout<<endl;}
    rep(i,N)assert(ORG_COST[i]==0);
  }

  void gen(){}
  void brute(){}
};

int main(int argc,char** argv){
  fo(i,1,argc-1)for(int j=0;argv[i][j];j++)if(argv[i][j]=='.')freopen(argv[i],"r",stdin);
  fo(i,1,argc-1)if(argv[i]==string("q"))cond=1<<30;
  fo(i,1,argc-1)if(argv[i]==string("gen")){(solver=new solver_t())->gen();exit(0);}
  fo(i,1,argc-1)if(argv[i]==string("brute")){(solver=new solver_t())->brute();exit(0);}
  ios::sync_with_stdio(false),cin.tie(0);
  cout.setf(ios::fixed),cout.precision(10);int t;if(multi||gcj)cin>>t;else t=1;
  fo(i,1,t){if(cond)cerr<<__LINE__<<" "<<i<<endl;if(gcj)cout<<"Case #"<<i<<": ";
    solver = new solver_t();
    solver->solve();
  }return 0;
}
template class std::vector<int>;
template class std::vector<ll>;

