import sys
sys.setrecursionlimit(100000)

INF = 10**6

N, M = map(int, input().split())
edges = []
g = [[] for _ in range(2*N+2)]
s, t = 0, 2*N+1

def add_edge(u,v,c):
  g[u].append(len(edges))
  edges.append([v,c])
  g[v].append(len(edges))
  edges.append([u,0])

def ford_fulkerson(s, t):
  flow = 0
  while True:
    seen = [False]*len(g)

    def augment(u, cap):
      if seen[u] or cap == 0: return 0
      if u == t: return cap

      seen[u] = True

      for i in g[u]:
        v, c = edges[i]
        aug = augment(v, min(c, cap))
        if aug > 0:
          edges[i][1] -= aug
          edges[i^1][1] += aug
          return aug
      return 0

    aug = augment(s, INF)
    if aug == 0: return flow
    flow += aug

for _ in range(M):
  u, v = map(int, input().split())
  add_edge(u,v+N,INF)
  add_edge(v,u+N,INF)

teams = "X"+input()
for v in range(1,N+1):
  add_edge(v,v+N,INF)
  add_edge(s,v,(2 if teams[v] == "1" else 1))
  add_edge(v+N,t,(2 if teams[v] == "0" else 1))

print(ford_fulkerson(s,t) - N)