#include <bits/stdc++.h>

using namespace std;

void zamena(int *xp, int *yp)
{
    int pom = *xp;
    *xp = *yp;
    *yp = pom;
}

void Sort(int arr[], int n)
{
    int i, j, d;


    for (i = 0; i < n-1; i++)
    {

        d = i;
        for (j = i+1; j < n; j++)
        if (arr[j] < arr[d])
            d = j;


        zamena(&arr[d], &arr[i]);
    }
}

void permutacija(int *a, int M) {
  int b = 1;
  for (int i = M - 1; b > 0 && i >= 0; i--)
  {
        int rezul = a[i] + b;
        b = rezul >> 1;
        a[i] = rezul & 1;
  }
}

int main()
{
    int N, M;
    cin >> N >> M;
    if( N < 1 || N > 100000 || M < 1 || M > 100000)  //Uslov
    {
        return 0;
    }
    long int A[N];
    for (int i = 0; i < N; i++)         //Unos druzeljubivosti
    {
        cin >> A[i];
    }
    for (int i = 0; i < N; i++)         //Uslov
    {
        if(A[i] > pow(10, 9) || A[i] < pow(-10, 9))
        {
            return 0;
        }
    }
    int X[M+1], Y[M+1];
    for(int i = 0; i<M ; i++)      //Unos poznanstava
    {
        cin >> X[i] >> Y[i];
    }
    for(int i = 0; i<M ; i++)      //Uslov
    {
        if(X[i] == Y[i] || X[i] < 1 || Y[i] < 1 || X[i] > N || Y[i] > N)
        {
            return 0;
        }
    }
    for(int i = 0; i < M ; i++)    //Uslov
    {
        for(int j = 0; j < M ; j++)
        {
            if(i != j)
            {
                if((X[i] == X[j] || X[i] == Y[j]) && (Y[i] == X[j] || Y[i] == Y[j]))
                {
                    return 0;
                }
            }
        }
    }
    int Poz[M];
    for(int i = 0; i<=M ; i++)           //Trazenje svih mogucih kombinacija i skladistenje
    {
        Poz[i] = 0;
    }
    int k=pow(2, M);
    int rez[k];
    for(int i = 0; i < k; i++)
    {
        int Pri[M], NePri[M];
        int rezultat = 0;
        for(int j = 0; j<N ; j++)
        {
            Pri[j] = 0;
            NePri[j] = 0;
        }
        for(int j = 0; j<M ; j++)
        {
            if(Poz[j] == 1)
            {
                Pri[X[j]-1]++;
                Pri[Y[j]-1]++;
            }
            else if(Poz[j] == 0)
            {
                NePri[X[j]-1]++;
                NePri[Y[j]-1]++;
            }
        }
        for(int j = 0; j<M ; j++)
        {


        }
        for(int j = 0; j < N; j++)
        {
            rezultat += A[j]*(Pri[j]-NePri[j]);
        }
        rez[i] = rezultat;
        permutacija(Poz, M);
    }

    Sort(rez, k);

    cout << rez[k-1] << endl;
    return 0;
}