#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool f = 0;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = 1;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return f ? -x : x;
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
void writeln(long long x) {
  write(x);
  puts("");
}
void writep(long long x) {
  write(x);
  putchar(' ');
}
const int N = 5e5 + 5, mo = 1e9 + 7;
int n, m, a[N], fac[N], inv[N], b[N];
char s[N];
int C(int n, int m) {
  if (n < m) return 0;
  return (long long)fac[n] * inv[m] % mo * inv[n - m] % mo;
}
int ksm(int x, int p) {
  int res = 1;
  for (; p; p >>= 1, x = (long long)x * x % mo)
    if (p & 1) res = (long long)res * x % mo;
  return res;
}
void init(int n) {
  fac[0] = 1;
  for (int i = (int)(1); i <= (int)(n); i++)
    fac[i] = (long long)i * fac[i - 1] % mo;
  inv[n] = ksm(fac[n], mo - 2);
  for (int i = (int)(n - 1); i >= (int)(0); i--)
    inv[i] = (long long)(i + 1) * inv[i + 1] % mo;
}
int upd(int x, int y) {
  x += y;
  if (x >= mo) x -= mo;
  return x;
}
int main() {
  init(N - 1);
  n = read();
  m = read();
  scanf("%s", s + 1);
  for (int i = (int)(1); i <= (int)(n); i++) a[i] = s[i] - '0';
  reverse(a + 1, a + n + 1);
  int sum = 0, now = 1;
  b[1] = C(n - 1, m);
  for (int i = (int)(2); i <= (int)(n); i++) {
    sum = upd(sum, (long long)now * C(n - i, m - 1) % mo);
    now = (long long)10 * now % mo;
    b[i] = upd(sum, (long long)now * C(n - i, m) % mo);
  }
  int ans = 0;
  for (int i = (int)(1); i <= (int)(n); i++)
    ans = upd(ans, (long long)b[i] * a[i] % mo);
  cout << ans;
}
