#include <stdio.h>
#include <math.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <queue>
#include <iostream>
using namespace std;
const long long int mod=1e18+7;

string sr[333333],t;
long long int d[333333],c[333333];

int main(){
#pragma warning(disable:4996)
#pragma comment(linker,"/STACK:536870912")
#ifdef _DEBUG
	freopen("input.txt","rt",stdin);
	freopen("output.txt","wt",stdout);
#else
	freopen("typing.in","rt",stdin);
	freopen("typing.out","wt",stdout);
#endif
	long long int n,m,l,i,j,k,q;
	string s1,s2;
	cin>>m>>n>>l;
	cin>>t;
	for(i=0;i<n;i++){
		cin>>c[i]>>sr[i];
	}
	for(i=1;i<=m;i++){
		d[i]=mod;
	}
	d[0]=0;
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
			for(k=0;k<sr[j].size();k++){
				if(i+k<m&&t[i+k]==sr[j][k]){
					d[i+k+1]=min(d[i+k+1],d[i]+c[j]);
				} else{
					break;
				}
			}
			for(k=1;k<sr[j].size();k++){
				s2.clear();
				for(q=k;q<sr[j].size();q++){
					s2.push_back(sr[j][q]);
				}
				bool k;
				k=true;
				if(i+s2.size()<=m){
					for(q=0;q<s2.size();q++){
						if(t[i+q]!=s2[q]){
							k=false;
							break;
						}
					}
					if(k){
						d[i+s2.size()]=min(d[i+s2.size()],d[i]+c[j]);
					}
				}
			}
		}
	}
	if(d[m]==mod){
		printf("-1");
	} else{
		printf("%I64d",d[m]);
	}

	return 0;
}