#include <bits/stdc++.h>
#define pb push_back
#define sc scanf
#define pr printf
#define tc int t; cin>>t; while(t--)
#define ccout if(debug) cout


///   P R V I   S U B T A S K   -   20 POENA
///   K O M B I N A T O R N A    P R E T R A G A

typedef long long ll;
using namespace std;
const int mxN=100010,mxM=100010,mod=1e9+7;
int n,m;
ll a[mxN], sol;
int pri[1000], nep[1000];

struct veza{
   int a, b;
   bool prijatelj;
}parovi[mxM];

void unos(){
   sc("%d %d", &n, &m);
   for(int i=1; i<=n; i++)
      cin>>a[i];
   for(int i=1; i<=m; i++)
      cin>>parovi[i].a>>parovi[i].b;
}
bool bitovi[150];
void nadji_bitset(int x){     ///radi
   memset(bitovi, 0, sizeof(bitovi));
   int br=1;
//   cout<<"broj=="<<x<<" (2)== ";
   while(x>0){
      bitovi[br]=x%2;
      x/=2;
      br++;
   }
//   cout<<"\nbitset\n";
//   for(int i=1; i<=m; i++){
//      cout<<bitovi[i];
//   }
//   cout<<"\n";
}
void sredi_prijateljstva(){   ///reko bih da i ovo radi
   memset(pri, 0, sizeof(pri));
   memset(nep, 0, sizeof(nep));

   for(int i=1; i<=m; i++){
      if(bitovi[i]){ //prijatelji su
         pri[parovi[i].a]++;
         pri[parovi[i].b]++;
      }
      else{
         nep[parovi[i].a]++;
         nep[parovi[i].b]++;
      }
   }
//   for(int i=1; i<=n; i++){
//      cout<<"ucesnik: "<<i<<" "<<pri[i]<<" prijatelja "<<nep[i]<<" neprijatelja\n";
//   }
}
ll sreca(){
   ll ret=0;
   for(int i=1; i<=n; i++){
      ret+=a[i]*(pri[i]-nep[i]);
   }
   return ret;
}
void solve(){
   sol=0;
   int kraj=(1<<m);
   for(int i=0; i<kraj; i++){
      nadji_bitset(i);
      sredi_prijateljstva();
      sol=max(sol, sreca());
   }
}

int main(){
//   for( m=1; m<=10; m++){
//      cout<<"M=="<<m<<endl;
//      solve();
//      cout<<"______\n";
//   }
//   return 0;
   unos();
   solve();
   cout<<sol<<endl;

   return 0;
}