def main():
    import sys
    N, M = map(int, sys.stdin.readline().split())
    edges = []
    for _ in range(M):
        a, b = map(int, sys.stdin.readline().split())
        edges.append((a-1, b-1))  # 0-based
    
    c = list(map(int, sys.stdin.readline().split()))
    
    # Create matrix
    matrix = []
    for i in range(N):
        row = 0
        # Set edge bits
        for j in range(M):
            a, b = edges[j]
            if a == i or b == i:
                row |= 1 << j
        # Set right-hand side (bit M)
        if c[i]:
            row |= 1 << M
        matrix.append(row)
    
    # Gaussian elimination
    rank = 0
    pivot_cols = []  # List of (row index, col)
    for col in range(M):
        # Find pivot row
        pivot = -1
        for r in range(rank, N):
            if (matrix[r] & (1 << col)) != 0:
                pivot = r
                break
        if pivot == -1:
            continue
        # Swap with the current rank row
        matrix[rank], matrix[pivot] = matrix[pivot], matrix[rank]
        # Eliminate this column in other rows
        for r in range(N):
            if r != rank and (matrix[r] & (1 << col)):
                matrix[r] ^= matrix[rank]
        pivot_cols.append( (rank, col) )
        rank += 1
    
    # Check for no solution
    for r in range(N):
        lhs = matrix[r] & ((1 << M) -1)
        rhs = (matrix[r] >> M) & 1
        if lhs == 0 and rhs == 1:
            print(-1)
            return
    
    # Determine free columns and pivot info
    used_cols = set(col for _, col in pivot_cols)
    free_cols = [col for col in range(M) if col not in used_cols]
    # Collect the pivot rows and their columns, and original row data
    pivot_info = []
    for r in range(N):
        row = matrix[r]
        lhs = row & ((1 << M) -1)
        if lhs == 0:
            continue
        for col in range(M):
            if (row >> col) & 1:
                pivot_col = col
                break
        pivot_info.append( (r, row, pivot_col) )
    
    min_ops = None
    # Iterate over all possible free variables assignments (0/1)
    from itertools import product
    for bits in product([0,1], repeat=len(free_cols)):
        x = [0]*M
        # Assign free variables
        for i in range(len(free_cols)):
            x[free_cols[i]] = bits[i]
        # Assign pivot variables
        # Process pivot rows in reverse order
        for info in reversed(pivot_info):
            r, row, col = info
            rhs = (row >> M) & 1
            val = rhs
            # XOR with the other variables in the row
            for c in range(col+1, M):
                if (row >> c) & 1:
                    val ^= x[c]
            x[col] = val
        # Calculate total operations
        total = sum(x)
        if min_ops is None or total < min_ops:
            min_ops = total
    
    if min_ops is not None:
        print(min_ops)
    else:
        print(-1)
    

if __name__ == "__main__":
    main()