#include <bits/stdc++.h>
using namespace std;
int inv[100010];
int fact[100010];
long long modPow(long long b, long long e) {
  if (!e) return 1LL;
  if (e & 1) return b * modPow(b, e - 1) % 1000000007LL;
  long long r = modPow(b, e >> 1);
  return r * r % 1000000007LL;
}
int bit[10][100010];
int query(int d, int i) {
  i = 100010 - i - 1;
  int s = 0;
  while (i) {
    s += bit[d][i];
    i -= i & (-i);
  }
  return s;
}
void update(int d, int i) {
  i = 100010 - i - 1;
  while (i < 100010) {
    bit[d][i]++;
    i += i & (-i);
  }
}
long long comb(long long x, long long y) {
  if (x < 0 || y < 0 || x < y) return 0;
  if (y == 0 || x == y) return 1;
  return 1LL * fact[x] * inv[y] % 1000000007LL * inv[x - y] % 1000000007LL;
}
int li[100010];
int main() {
  int n, k;
  char a;
  long long resp = 0LL;
  fact[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < 100010; i++) {
    fact[i] = fact[i - 1] * 1LL * i % 1000000007LL;
    inv[i] = modPow(fact[i], 1000000007LL - 2);
  }
  scanf("%d %d\n", &n, &k);
  for (int i = 0; i < n; i++) {
    scanf("%c", &a);
    li[i] = a - '0';
  }
  for (int i = 0; i < n; i++) {
    update(li[i], n - 1 - i);
  }
  for (int i = 0; i < 10; i++) {
    long long modulo = i;
    for (int j = 1; j < n; j++) {
      long long temp = modulo * query(i, j) % 1000000007LL;
      long long c = comb(n - 1 - j, k - 1);
      resp = (resp + temp * c) % 1000000007LL;
      modulo = (10 * modulo) % 1000000007LL;
    }
  }
  for (int i = 0; i < 10; i++) {
    long long modulo = i;
    for (int j = n - 1; j >= 0; j--) {
      if (li[j] == i) {
        resp = (resp + modulo * comb(j, k)) % 1000000007LL;
      }
      modulo = (10 * modulo) % 1000000007LL;
    }
  }
  printf("%lld\n", resp);
  return 0;
}
