#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define rep(i,b) FOR(i,0,b)
#define INF 2e6
#define dump(x) cerr<<#x<<"="<<x<<endl
#define ALL(a) (a).begin(),(a).end()
#define EACH(e,v) for(auto& e:v)
#define SORT(v) sort(ALL(v))
#define PERM(v) SORT(v);for(bool c##p=1;c##p;c##p=next_permutation(ALL(v)))
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<vii> viii;
typedef pair<int,int> P;
template <class T> void chmin(T & a, T const & b) { if (b < a) a = b; }
template <class T> void chmax(T & a, T const & b) { if (b > a) a = b; }
template <typename T>
string to_string(const T &n){ostringstream stm;stm << n;return stm.str();}
inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v; }
using ll = long long;
const ll mod = 1000'000'007;

const int MAX_C=20;



int x[11234],y[11234],dv[11234],cv[11234];
vector<int> p;
vector<int> q[51];
vector<int> r[51];

int dp[21][110][110];
int dp2[110][110];

// dist から cost 
//int dtoc[MAX_C+10][2123456];

//会社cで距離d移動するときにかかるコスト
int calcCost(int c,int d){
    
    int ret=0;

    for(int i=0;i<p[c]-1;i++){
        if(d<q[c][i]){
            ret+=(d-(i==0?0:q[c][i-1]))*r[c][i];
            break;
        }else{
            ret+=(q[c][i]-(i==0?0:q[c][i-1]))*r[c][i];
        }
    }

    if(p[c]==1){
        ret=d*r[c][0];
    }else if(d>q[c].back()){
        ret+=(d-q[c].back())*r[c].back();
    }
    //dump(c);dump(d);
    //dump(ret);

    return ret;
    
}

void init(){
    rep(com,21)rep(i,110)rep(j,110)dp[com][j][i]=INF;
    // rep(i,MAX_C+10)rep(j,2123456){
    //     dtoc[i][j]=INF;
    // }
    rep(i,110)rep(j,110){
        dp2[i][j]=INF;
    }

    p.clear();
    rep(i,51){
        q[i].clear();
        r[i].clear();
    }

}
signed main(){
    int n,m,c,s,g;
    while(cin>>n>>m>>c>>s>>g,n){
        s--;g--;

        init();
        //dv 長さ cv 鉄道会社の番号
        rep(i,m){
            cin>>x[i]>>y[i]>>dv[i]>>cv[i];
            x[i]--;y[i]--;cv[i]--;
        }
        rep(i,c){
            int pt;
            cin>>pt;
            p.push_back(pt);
        }
        rep(i,c){
            int qt,rt;
            rep(j,p[i]-1){
                //q折れ目の位置 r増加幅
                cin>>qt;
                q[i].push_back(qt);
            }

            rep(j,p[i]){
                cin>>rt;
                r[i].push_back(rt);
            }
        }
        //dump("before dtoc calc");
        //dtocの計算
        // for(int com=0;com<c;com++){
        //     int cost=0;
        //     int nowP=0;
        //     dtoc[com][0]=0;
        //     for(int d=1;d<2123456;d++){
        //         if(d>q[com][nowP]){
        //             nowP++;
        //         }
        //         dtoc[com][d]=dtoc[com][d-1]+r[com][nowP];
        //     }
        // }   


        //("dtoc");
        // for(int com=0;com<c;com++){
        //     for(int d=0;d<25;d++){
        //         cout<<dtoc[com][d]<<" ";
        //     }
        //     cout<<endl;
        // }

        //dp[鉄道会社][始点][終点]
        
        
        rep(i,m){
            int com=cv[i];
            chmin(dp[com][x[i]][y[i]],dv[i]);
            chmin(dp[com][y[i]][x[i]],dv[i]);
        }

        rep(com,c)rep(k,n)rep(i,n)rep(j,n){
            dp[com][i][j]=min(dp[com][i][j],dp[com][i][k]+dp[com][k][j]);
        }

        rep(com,c){
            rep(i,n)rep(j,n){
                int dist=dp[com][i][j];
                int cost=calcCost(com,dist);
                dp[com][i][j]=cost;
               
            }
        }
        //dump(dp[1][1][2]);
        rep(i,n)rep(j,n){
            int temp=INF;
            rep(com,c){
                if(temp>dp[com][i][j]){
                    temp=dp[com][i][j];
                }
            }
            dp2[i][j]=temp;
        }
        //dump(dp2[1][2]);

        rep(k,n)rep(i,n)rep(j,n){
            chmin(dp2[i][j],dp2[i][k]+dp2[k][j]);
        }
        // dump(dp2[1][2]);

        if(dp2[s][g]==INF){
            cout<<-1<<endl;
        }else{
            cout<<dp2[s][g]<<endl;
        }






    }
 
}


Measured memory_bytes: 4364