#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
const int mod = 1e9+7;
ll a[maxn],b[maxn];
vector<int> G[maxn];
queue<int> q;
int in[maxn];
int n,m;
void init(){
memset(in,0,sizeof(in));
for(int i=1;i<=n;i++) G[i].clear();
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int u,v;
init();
for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
in[v]++;
}
for(int i=1;i<=n;i++) if(!in[i]) q.push(i);
ll ans=0;
while(!q.empty())
{
u=q.front(); q.pop();
for(auto it : G[u]){
v = it;
ans = (ans+(a[u]*b[v])%mod)%mod;
a[v] =(a[v]+a[u])%mod;
in[v]--;
if(!in[v]) q.push(v);
}
}
printf("%lld\n",ans);
}
}