#include <bits/stdc++.h>
char S[100050], T[100050];
int pre[100050], trs[100050][27];
int dp[2][100050], tim[2][100050], ttp;
int main() {
  scanf("%s", S + 1);
  scanf("%s", T + 1);
  int slen = strlen(S + 1), tlen = strlen(T + 1);
  pre[1] = 0;
  for (int i = 2; i <= tlen; i++) {
    int p = pre[i - 1];
    while (p && T[p + 1] != T[i]) p = pre[p];
    pre[i] = T[p + 1] == T[i] ? p + 1 : 0;
  }
  trs[0][T[1] - 'a'] = 1;
  for (int i = 1; i <= tlen; i++) {
    memcpy(trs[i], trs[pre[i]], sizeof(int) * 27);
    if (i < tlen) trs[i][T[i + 1] - 'a'] = i + 1;
  }
  int x = 0;
  dp[x][0] = tim[x][0] = ++ttp;
  for (int i = 1; i <= slen; i++) {
    x ^= 1;
    ++ttp;
    if (S[i] == '?') {
      for (int j = 0; j <= tlen; j++)
        if (tim[x ^ 1][j] == ttp - 1) {
          for (int c = 0; c < 26; c++) {
            int &t = tim[x][trs[j][c]], &v = dp[x][trs[j][c]];
            if (t < ttp)
              t = ttp, v = dp[x ^ 1][j];
            else
              v = (v > dp[x ^ 1][j] ? v : dp[x ^ 1][j]);
          }
        }
      dp[x][tlen]++;
    } else {
      for (int j = 0; j <= tlen; j++)
        if (tim[x ^ 1][j] == ttp - 1) {
          int c = S[i] - 'a';
          int &t = tim[x][trs[j][c]], &v = dp[x][trs[j][c]];
          if (t < ttp)
            t = ttp, v = dp[x ^ 1][j];
          else
            v = (v > dp[x ^ 1][j] ? v : dp[x ^ 1][j]);
        }
      dp[x][tlen]++;
    }
  }
  int ans = 0;
  for (int i = 0; i <= tlen; i++)
    if (tim[x][i] == ttp) ans = (ans > dp[x][i] ? ans : dp[x][i]);
  printf("%d\n", ans - 1);
}
