#include <bits/stdc++.h>
using namespace std;
long long int mod = 1e9 + 7;
long long int dx[] = {0, 0, 1, -1};
long long int dy[] = {1, -1, 0, 0};
long long int m = 0, n, res = 0, k, ans = 0;
string s2, ch = "", s, t, s1 = "";
vector<pair<string, long long int> > vm;
vector<pair<pair<long long int, long long int>, long long int> > vvv;
vector<pair<long long int, long long int> > vv;
vector<pair<string, long long int> > vv2;
vector<long long int> v[1000005], v1;
long long int dp[26][200005], b[26];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long int i = 0, x = 0, z = 0, y = 0, j = 0, q, mx = 0, idx = 0, ok = 0,
                l = 0, r = 0, negatif = 0, positif = 0, r1, d;
  set<pair<long long int, long long int> >::iterator it;
  multiset<long long int>::iterator its;
  cin >> s >> t;
  n = s.size();
  m = t.size();
  if (m > n) return cout << "0", 0;
  for (i = 0; i < m; i++) {
    x = (t[i] - 'a');
    b[x]++;
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < 26; j++) {
      if (i) dp[j][i] = dp[j][i - 1];
      dp[j][i] += ((s[i] - 'a') == j);
    }
  }
  res = 0;
  for (i = 0; i < n; i++) {
    l = i;
    r = i + m - 1;
    if (r >= n) break;
    long long int nbq = 0;
    long long int flag = 1;
    long long int cnt = 0;
    for (j = 0; j < 26; j++) {
      long long int cur = dp[j][r];
      if (l) cur -= dp[j][l - 1];
      nbq += cur;
      if (cur > b[j]) flag = 0;
      cnt += (b[j] - cur);
    }
    nbq = m - nbq;
    if (!flag || (cnt != nbq)) continue;
    res++;
  }
  cout << res;
  return 0;
}
