#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template<class S, class T> inline S max_L(S a,T b){
  return a>=b?a:b;
}
inline void rd(int &x){
  int k;
  int m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void rd(char &c){
  int i;
  for(;;){
    i = getchar_unlocked();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c = i;
}
inline int rd(char c[]){
  int i;
  int sz = 0;
  for(;;){
    i = getchar_unlocked();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c[sz++] = i;
  for(;;){
    i = getchar_unlocked();
    if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
      break;
    }
    c[sz++] = i;
  }
  c[sz]='\0';
  return sz;
}
inline void wt_L(char a){
  putchar_unlocked(a);
}
inline void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    putchar_unlocked(c[i]);
  }
}
char S[8002];
int N;
int X;
int Y;
int x[3100];
int y[3100];
int xs;
int ys;
int dp[4001];
int main(){
  int Lj4PdHRW;
  int i;
  int j;
  int k = 0;
  N = rd(S);
  rd(X);
  rd(Y);
  for(i=(0);i<(N);i++){
    if(S[i]!='F'){
      break;
    }
  }
  X -= i;
  while(i<N){
    j = i;
    while(j<N && S[j]=='F'){
      j++;
    }
    if(j > i){
      if(k==0){
        x[xs++]= j - i;
      }
      else{
        y[ys++]= j - i;
      }
    }
    i = j + 1;
    k ^= 1;
  }
  for(Lj4PdHRW=(0);Lj4PdHRW<(2);Lj4PdHRW++){
    {
      int KL2GvlyY;
      int Q5VJL1cS;
      if(xs==0){
        Q5VJL1cS = 0;
      }
      else{
        Q5VJL1cS = x[0];
        for(KL2GvlyY=(1);KL2GvlyY<(xs);KL2GvlyY++){
          Q5VJL1cS += x[KL2GvlyY];
        }
      }
      k =Q5VJL1cS- abs(X);
    }
    if(k < 0 || k % 2){
      wt_L("No");
      wt_L('\n');
      return 0;
    }
    k /= 2;
    dp[0] = 1;
    for(i=(1);i<(k+1);i++){
      dp[i] = 0;
    }
    for(j=(0);j<(xs);j++){
      for(i=(k+1)-1;i>=(x[j]);i--){
        dp[i] |= dp[i-x[j]];
      }
    }
    if(dp[k]==0){
      wt_L("No");
      wt_L('\n');
      return 0;
    }
    swap(X,Y);
    swap(xs,ys);
    int cTE1_r3A = max_L(xs, ys);
    for(i=(0);i<(cTE1_r3A);i++){
      swap(x[i], y[i]);
    }
  }
  wt_L("Yes");
  wt_L('\n');
  return 0;
}
// cLay varsion 20190925-1

// --- original code ---
// char S[8002]; int N, X, Y;
// 
// int x[3100], y[3100], xs, ys;
// int dp[4001];
// {
//   int i, j, k = 0;
//   rd(S@N,X,Y);
//   rep(i,N) if(S[i]!='F') break;
//   X -= i;
//   while(i<N){
//     j = i;
//     while(j<N && S[j]=='F') j++;
//     if(j > i) if[k==0, x[xs++], y[ys++]] = j - i;
//     i = j + 1;
//     k ^= 1;
//   }
// 
//   rep(2){
//     k = sum(x(xs)) - abs(X);
//     if(k < 0 || k % 2) wt("No"), return 0;
//     k /= 2;
// 
//     dp[0] = 1;
//     rep(i,1,k+1) dp[i] = 0;
//     rep(j,xs) rrep(i,x[j],k+1) dp[i] |= dp[i-x[j]];
//     if(dp[k]==0) wt("No"), return 0;
// 
//     swap(X,Y);
//     swap(xs,ys);
//     REP(i,max(xs,ys)) swap(x[i], y[i]);
//   }
// 
//   wt("Yes");
// }


Measured memory_bytes: 256