#include<bits/stdc++.h>
const int N = 2e5 + 10;
const int V = 1e6 + 10;
const long long M = 1e9 + 7;
const long long INF = 1e18;
long long a[N + 1],n,m;
long long fact[N + 1];
std::vector<int> adj[N + 1];
void readData(){
std::cin >> n >> m;
fact[0] = 1;
for(int i = 1;i <= n;++i){
std::cin >> a[i];
fact[i] = (fact[i - 1] * i) % M;
}
for(int i = 1;i <= m;++i){
int u,v;
std::cin >> u >> v;
adj[u].emplace_back(v);
adj[v].emplace_back(u);
}
}
long long f(long long t){
return t * (t - 1) / 2;
}
long long solve(){
long long ans = 0;
for(int i = 1;i <= n;++i){
long long t = adj[i].size();
ans = (ans + (t * f(n) % M) * a[i] % M * fact[n - 2]) % M;
}
return ans;
}
long long brute(){
long long ans = 0;
std::vector<int> idx(n + 1,0);
for(int i = 1;i <= n;++i){
idx[i] = i;
}
do{
std::vector<bool> vis(n + 1,0);
for(int i = 1;i <= n;++i){
int it = idx[i];
vis[it] = true;
for(int u : adj[it]){
if(!vis[u]){
ans += a[u];
}
ans %= M;
}
}
}while(std::next_permutation(idx.begin() + 1,idx.end()));
return ans;
}
int main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
freopen("order.inp","r",stdin);
freopen("order.ans","w",stdout);
readData();
std::cout << solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCmNvbnN0IGludCBOID0gMmU1ICsgMTA7CmNvbnN0IGludCBWID0gMWU2ICsgMTA7CmNvbnN0IGxvbmcgbG9uZyBNID0gMWU5ICsgNzsKY29uc3QgbG9uZyBsb25nIElORiA9IDFlMTg7Cgpsb25nIGxvbmcgYVtOICsgMV0sbixtOwpsb25nIGxvbmcgZmFjdFtOICsgMV07CnN0ZDo6dmVjdG9yPGludD4gYWRqW04gKyAxXTsKCnZvaWQgcmVhZERhdGEoKXsKICAgIHN0ZDo6Y2luID4+IG4gPj4gbTsKICAgIGZhY3RbMF0gPSAxOwogICAgZm9yKGludCBpID0gMTtpIDw9IG47KytpKXsKICAgICAgICBzdGQ6OmNpbiA+PiBhW2ldOwogICAgICAgIGZhY3RbaV0gPSAoZmFjdFtpIC0gMV0gKiBpKSAlIE07CiAgICB9CiAgICBmb3IoaW50IGkgPSAxO2kgPD0gbTsrK2kpewogICAgICAgIGludCB1LHY7CiAgICAgICAgc3RkOjpjaW4gPj4gdSA+PiB2OwogICAgICAgIGFkalt1XS5lbXBsYWNlX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLmVtcGxhY2VfYmFjayh1KTsKICAgIH0KfQpsb25nIGxvbmcgZihsb25nIGxvbmcgdCl7CiAgICByZXR1cm4gdCAqICh0IC0gMSkgLyAyOwp9CmxvbmcgbG9uZyBzb2x2ZSgpewogICAgbG9uZyBsb25nIGFucyA9IDA7CiAgICBmb3IoaW50IGkgPSAxO2kgPD0gbjsrK2kpewogICAgICAgIGxvbmcgbG9uZyB0ID0gYWRqW2ldLnNpemUoKTsKICAgICAgICBhbnMgPSAoYW5zICsgKHQgKiBmKG4pICUgTSkgKiBhW2ldICUgTSAqIGZhY3RbbiAtIDJdKSAlIE07CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CmxvbmcgbG9uZyBicnV0ZSgpewogICAgbG9uZyBsb25nIGFucyA9IDA7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGlkeChuICsgMSwwKTsKICAgIGZvcihpbnQgaSA9IDE7aSA8PSBuOysraSl7CiAgICAgICAgaWR4W2ldID0gaTsKICAgIH0KICAgIGRvewogICAgICAgIHN0ZDo6dmVjdG9yPGJvb2w+IHZpcyhuICsgMSwwKTsKICAgICAgICBmb3IoaW50IGkgPSAxO2kgPD0gbjsrK2kpewogICAgICAgICAgICBpbnQgaXQgPSBpZHhbaV07CiAgICAgICAgICAgIHZpc1tpdF0gPSB0cnVlOwogICAgICAgICAgICBmb3IoaW50IHUgOiBhZGpbaXRdKXsKICAgICAgICAgICAgICAgIGlmKCF2aXNbdV0pewogICAgICAgICAgICAgICAgICAgIGFucyArPSBhW3VdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYW5zICU9IE07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9d2hpbGUoc3RkOjpuZXh0X3Blcm11dGF0aW9uKGlkeC5iZWdpbigpICsgMSxpZHguZW5kKCkpKTsKICAgIHJldHVybiBhbnM7Cn0KaW50IG1haW4oKXsKICAgIHN0ZDo6aW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBzdGQ6OmNpbi50aWUobnVsbHB0cik7CiAgICBmcmVvcGVuKCJvcmRlci5pbnAiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJvcmRlci5hbnMiLCJ3IixzdGRvdXQpOwogICAgcmVhZERhdGEoKTsKICAgIHN0ZDo6Y291dCA8PCBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K