#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;
}