#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=100005;
int n,m;
int a[N],siz[N];
bool vis[N];
vector<int> edges[N];
void init()
{
for(int i=1;i<=n;i++)
{
a[i]=i;
siz[i]=1;
}
}
int find(int x)
{
if(a[x]==x) return x;
a[x]=find(a[x]);
return a[x];
}
int ans=0;
void merge(int x,int y)
{
if(find(x)==find(y)) return;
ans+=siz[find(x)]*siz[find(y)];
siz[find(y)]+=siz[find(x)];
a[find(x)]=find(y);
}
signed main()
{
cin>>n>>m;
init();
string str;
cin>>str;
for(int i=1;i<=n;i++)
{
if(str[i-1]=='1') vis[i]=true;
}
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
if(vis[u]&&vis[v]) merge(u,v);
edges[u].push_back(v);
edges[v].push_back(u);
}
int ansU=-1;
int ansNum=0;
for(int u=1;u<=n;u++)
{
if(vis[u]) continue;
set<int> visited;
int cnt=1;
int sum=0;
for(int v:edges[u])
{
if(!vis[v]) continue;
if(visited.find(find(v))!=visited.end()) continue;
visited.insert(find(v));
sum+=cnt*siz[find(v)];
cnt+=siz[find(v)];
}
if(sum>ansNum) {ansU=u;ansNum=sum;}
}
cout<<ansU<<" "<<ans+ansNum<<endl;
return 0;
}