def floyds_cycle_finding(a0, f) -> tuple[int, int]: """ フロイドの循環検出法 a0 : 初期値 f : 次の値を求める関数 return: tuple[サイクルに入るまでの長さ, サイクルの長さ] """ x = y = a0 while 1: x = f(x) y = f(f(y)) if x == y: break x = a0 head_len = 0 while x != y: x = f(x) y = f(y) head_len += 1 cycle_len = 0 while 1: x = f(x) y = f(f(y)) cycle_len += 1 if x == y: break return head_len, cycle_len def simulate(k, stock): buy = 0 s = stock for i in range(k): if s > 0: s -= 1 else: buy += 1 s += ds[i % N] return buy, s def box(stock): s = stock for i in range(N): if s > 0: s -= 1 s += ds[i] return min(s, 100) INF = 1 << 60 N, K = map(int, input().split()) S = input() ds = [int(c) for c in S] if K < 1000: buy, stock = simulate(K, 0) print(buy) exit() head_len, cycle_len = floyds_cycle_finding(0, box) buy, stock = simulate(head_len * N, 0) k = K - (head_len * N) tot_b = 0 s = stock for _ in range(cycle_len): b2, s = simulate(N, s) tot_b += b2 t = k // (cycle_len * N + 10) buy += tot_b * t rest = k - (t * N) for _ in range(rest): b2, s = simulate(N, s) buy += b2 print(buy)