#include <bits/stdc++.h>
using namespace std;
const int inf = 2e9;
const long double eps = 0.000001;
const long long mod = 1e9 + 7;
const long double PI = 3.14159265359;
template <class T>
struct MyVector : vector<T> {
  MyVector() : vector<T>() {}
  MyVector(int n) : vector<T>(n) {}
  T &operator[](size_t i) { return vector<T>::at(i); }
};
string t;
string p;
vector<int> a;
bool check(int m) {
  vector<int> u((int)t.size(), false);
  for (int i = 0; i < m; i++) {
    u[a[i]] = true;
  }
  string ns;
  for (int i = 0; i < (int)t.size(); i++) {
    if (u[i]) continue;
    ns.push_back(t[i]);
  }
  int idx = 0;
  for (int i = 0; i < (int)p.size(); i++) {
    bool fl = false;
    for (; idx < (int)ns.size(); idx++) {
      if (ns[idx] == p[i]) {
        idx++;
        fl = true;
        break;
      }
    }
    if (!fl) return false;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cin >> t >> p;
  a.resize((int)t.size());
  for (int i = 0; i < (int)t.size(); i++) {
    cin >> a[i];
    a[i]--;
  }
  int l = -1, r = (int)t.size() + 1;
  while (r - l > 1) {
    int m = (l + r) / 2;
    if (check(m))
      l = m;
    else
      r = m;
  }
  cout << l;
  return 0;
}
