#include <bits/stdc++.h>
using namespace std;
int inv(int a, int b) {
  int x, y;
  a %= b;
  if (a == 1) return 1;
  y = -inv(b, a);
  x = (1LL * b * y + 1) / a;
  return x < 0 ? x + b : x;
}
const int mod = (1e9) + 7;
inline int mul(int a, int b) { return (1LL * a * b) % mod; }
inline int add(int a, int b) {
  int c = a + b;
  return c >= mod ? c - mod : c;
}
inline int sub(int a, int b) {
  int c = a - b;
  return c < 0 ? c + mod : c;
}
int fac[100010];
int N, K;
void init() {
  int i;
  fac[0] = 1;
  for (i = 1; i <= N; ++i) {
    fac[i] = mul(fac[i - 1], i);
  }
}
int choose(int n, int k) {
  if (k < 0 || k > n) return 0;
  return mul(fac[n], mul(inv(fac[k], mod), inv(fac[n - k], mod)));
}
int f[100010];
char A[100010];
void dp() {
  int i, sum, pref, pow;
  pref = 0;
  pow = 1;
  sum = 0;
  for (i = 1; i < N - 1; ++i) sum += A[i];
  for (i = 1; i < N - 1; ++i) {
    f[i] = sub(f[i - 1], pref);
    f[i] = add(f[i], mul(sum, pow));
    pow = mul(pow, 10);
    sum = sub(sum, A[N - i - 1]);
    pref = add(A[i], mul(pref, 10));
  }
}
int compute() {
  int i, pow, num, ways;
  num = 0;
  int tot = 0;
  for (i = 0; i < N - 1; ++i) {
    num = add(A[i], mul(num, 10));
    ways = choose(N - i - 2, K - 1);
    tot = add(tot, mul(num, ways));
  }
  num = add(A[i], mul(num, 10));
  if (!K) tot = add(tot, num);
  num = 0;
  pow = 1;
  for (i = N - 1; i > 0; --i) {
    num = add(num, mul(A[i], pow));
    pow = mul(pow, 10);
    ways = choose(i - 1, K - 1);
    tot = add(tot, mul(num, ways));
  }
  for (i = 1; i < N - 1; ++i) {
    tot = add(tot, mul(f[i], choose(N - i - 2, K - 2)));
  }
  return tot;
}
int main() {
  int i;
  scanf("%d%d", &N, &K);
  scanf("%s", A);
  for (i = 0; i < N; ++i) A[i] -= '0';
  init();
  dp();
  printf("%d\n", compute());
  return 0;
}
