def d_wall(H, W, C, A):

    cost=C

    for k in range(10):

        for i in range(10):

            for j in range(10):

                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])

    ans = 0

    for i in range(H):

        for j in range(W):

            if A[i][j] != -1:

                ans += cost[A[i][j]][1]

    return ans



H,W = [int(i) for i in input().split()]

C = [[int(i) for i in input().split()] for j in range(10)]

A = [[int(i) for i in input().split()] for j in range(H)]

print((d_wall(H, W, C, A)))
def d_wall(H, W, C, A):

    # cost[i][j]には最終的に数字iからjに移行するための最小コストが格納される

    cost = [x[:] for x in C]



    # ワーシャルフロイド法で最小コストを計算

    for k in range(10):

        for i in range(10):

            for j in range(10):

                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])

    ans = 0

    # 壁の各数字ごとにコストの値を参照、和を取る

    for i in range(H):

        for j in range(W):

            if A[i][j] != -1:

                ans += cost[A[i][j]][1]  # 壁の数字から1へ移行するための最小コスト

    return ans



H,W = [int(i) for i in input().split()]

C = [[int(i) for i in input().split()] for j in range(10)]

A = [[int(i) for i in input().split()] for j in range(H)]

print((d_wall(H, W, C, A)))
def d_wall(H, W, C, A):
    cost = C
    for k in range(10):
        for i in range(10):
            for j in range(10):
                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])
    ans = 0
    for i in range(H):
        for j in range(W):
            if A[i][j] != -1:
                ans += cost[A[i][j]][1]
    return ans


H, W = [int(i) for i in input().split()]
C = [[int(i) for i in input().split()] for j in range(10)]
A = [[int(i) for i in input().split()] for j in range(H)]
print((d_wall(H, W, C, A)))

def d_wall(H, W, C, A):
    # cost[i][j]には最終的に数字iからjに移行するための最小コストが格納される
    cost = [x[:] for x in C]
    # ワーシャルフロイド法で最小コストを計算
    for k in range(10):
        for i in range(10):
            for j in range(10):
                cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j])
    ans = 0
    # 壁の各数字ごとにコストの値を参照、和を取る
    for i in range(H):
        for j in range(W):
            if A[i][j] != -1:
                ans += cost[A[i][j]][1]  # 壁の数字から1へ移行するための最小コスト
    return ans


H, W = [int(i) for i in input().split()]
C = [[int(i) for i in input().split()] for j in range(10)]
A = [[int(i) for i in input().split()] for j in range(H)]
print((d_wall(H, W, C, A)))

-    cost = C +    # cost[i][j]には最終的に数字iからjに移行するための最小コストが格納される +    cost = [x[:] for x in C] +    # ワーシャルフロイド法で最小コストを計算 +    # 壁の各数字ごとにコストの値を参照、和を取る -                ans += cost[A[i][j]][1] +                ans += cost[A[i][j]][1]  # 壁の数字から1へ移行するための最小コスト