#include #include #include #include #include using namespace std; const int inf = 0x7fffffff; const int Maxn = 100010; int n, K; char s[Maxn]; int a[Maxn]; int _max(int x, int y) { return x > y ? x : y; } int main() { int i, j, k, T; scanf("%d", &T); while(T--){ scanf("%d%d", &n, &K); scanf("%s", s+1); if(K == n-1){ bool po = false; for(i = 1; i <= n; i++){ if((s[i]-'0')%3 == 0){ po = true; break; } } if(po == true) printf("yes\n"); else printf("no\n"); continue; } for(i = 1; i <= n; i++) a[i] = s[i]-'0'; int sum = 0, s[3], l[3]; for(i = 0; i < 3; i++) s[i] = l[i] = 0; for(i = n; i > K+1; i--) sum = (sum+a[i])%3, s[a[i]%3]++; bool bk = false; for(i = K+1; i >= 1 && bk == false; i--){ int p = (sum+a[i])%3; if(a[i] > 0){ if(p % 3 == 0){ bk = true; break; } for(j = 0; j < 3; j++){ if(s[j] > 0 && l[(j-p+3)%3] > 0){ bk = true; break; } } for(j = 0; j < 3; j++){ if(p == 1){ if(s[j] > 1 && l[((2*j-p+3)/2+3)%3] > 1){ bk = true; break; } } else { if(s[j] > 1 && l[((2*j-p)/2+3)%3] > 1){ bk = true; break; } } } } l[a[i]%3]++; } if(bk == true) printf("yes\n"); else printf("no\n"); } return 0; }