#include <bits/stdc++.h>
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(nullptr); cout.tie(nullptr);
string str;
int q, l, r, n, idx = 1, best = 0;
vector<pair<int, int>> vec;
cin >> str >> q;
n = (int) str.size();
vector<int> point(n + 1, 0);
set<int> st[26];
for(int j = 0; j < n; ++j){
st[str[j] - 'a'].insert(j);
}
while(q--){
cin >> l >> r;
vec.push_back({l, r});
}
for(int i = 1; i <= n; ++i){
cin >> point[i];
}
auto bad = [&](int left, int right) -> bool {
for(int j = 0; j < 26; ++j){
if((int) st[j].size() == 0) continue;
auto l = st[j].lower_bound(left);
auto r = st[j].lower_bound(right);
if(r == st[j].end() || *r > right) --r;
if(l == st[j].end() || *l > right) --l;
if(left <= *l && *r <= right && (*l) != (*r)) return 1;
}
return 0;
};
for(auto [l, r] : vec){
while(idx <= n && bad(l - 1, r - 1)){
st[str[point[idx] - 1] - 'a'].erase(point[idx] - 1);
str[point[idx] - 1] = '*';
idx += 1, best += 1;
}
}
cout << best << "\n";
return 0;
}