#include <cstdio>   
#include <cstring>   
#include <algorithm>   
    
using namespace std;   
    
const int maxn = 100 + 10;   
const int maxm = 1000 + 10;   
const long long IINF = 0xc0c0c0c0c0c0c0c0LL;   
    
int N, M, K;   
char C[maxn][maxm];   
int G[maxn][maxm];   
long long d[maxm];   
    
    
void dfs(int from, int cur_r, int cur_c, int v, long long sum) {   
    if(cur_r < 1) cur_r = 1;   
    if(cur_r > N) cur_r = N;   
    if(cur_r == 1 && cur_c != from) {       
        d[cur_c] = max(d[cur_c], sum);   
        return;     
    }   
    if(cur_c - from == K || cur_c == M) return;   
    if(C[cur_r][cur_c] == '$') sum += G[cur_r][cur_c];      
    else if(cur_r != 1) v += G[cur_r][cur_c];   
    dfs(from, cur_r+v, cur_c+1, v, sum);   
    dfs(from, cur_r+v-1, cur_c+1, v-1, sum);   
    dfs(from, cur_r+v+1, cur_c+1, v+1, sum);   
}   
    
void read() {   
    for(int i = 1; i <= N; i++)   
        for(int j = 1; j <= M; j++)   
            scanf(" %c%d", &C[i][j], &G[i][j]);   
}   
    
void solve() {   
    memset(d, 0xc0, sizeof(d));   
    d[1] = 0;   
    for(int i = 1; i <= M; i++) dfs(i, 1, i, 0, d[i]);   
    if(C[1][M] == '$') d[M] += G[1][M];   
    printf("%I64d\n", d[M]);   
}   
    
int main()   
{   
    while(scanf("%d%d%d", &N, &M, &K) == 3) {   
        if(!N && !M && !K) return 0;   
        read();