rewrite below code to execute without csvhelper and run on c# version 5.

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // Configure file paths - update these to your actual file paths
        string file1Path = @"file-web.csv";
        string file2Path = @"file-win.csv";
        string outputPath = @"comparison_result.csv";

        Console.WriteLine("Starting comparison process...");
        
        // Dictionary to store records from file1 with uniqueId as key
        var file1Records = new Dictionary<string, string[]>();
        
        // Read file1 into memory
        Console.WriteLine("Reading file 1...");
        using (var reader = new StreamReader(file1Path))
        {
            var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
            csv.Read(); // Read header row
            string[] headers = csv.Context.Parser.Record;
            
            while (csv.Read())
            {
                var record = csv.Context.Parser.Record;
                string uniqueId = record[2]; // Column 3 (0-indexed) is the unique ID
                
                if (!file1Records.ContainsKey(uniqueId))
                {
                    file1Records.Add(uniqueId, record);
                }
                else
                {
                    Console.WriteLine($"Warning: Duplicate ID {uniqueId} found in file 1");
                }
            }
        }
        
        Console.WriteLine($"Loaded {file1Records.Count} records from file 1");
        
        // Create output file and begin comparing
        Console.WriteLine("Comparing files and writing results...");
        
        // Track which IDs we've already processed
        var uniqueIdsProcessed = new HashSet<string>();
        
        using (var writer = new StreamWriter(outputPath, false, Encoding.UTF8))
        {
            // Write header row
            var headerBuilder = new StringBuilder();
            for (int i = 0; i < 3; i++) // First 3 columns as-is
            {
                headerBuilder.Append($"Column{i+1},");
            }
            
            for (int i = 3; i < 60; i++) // Columns 4-60 comparison
            {
                headerBuilder.Append($"Column{i+1}_File1,Column{i+1}_File2,Column{i+1}_Comparison,");
            }
            
            // Remove trailing comma and write header
            var header = headerBuilder.ToString().TrimEnd(',');
            writer.WriteLine(header);
            
            // Process file2 and compare with file1
            using (var reader = new StreamReader(file2Path))
            {
                var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
                csv.Read(); // Skip header row
                
                int matchesFound = 0;
                
                while (csv.Read())
                {
                    var record2 = csv.Context.Parser.Record;
                    string uniqueId = record2[2]; // Column 3 (0-indexed) is the unique ID
                    
                    // Check if this ID exists in file1
                    if (file1Records.TryGetValue(uniqueId, out string[] record1))
                    {
                        matchesFound++;
                        uniqueIdsProcessed.Add(uniqueId);
                        
                        // Write comparison row
                        var rowBuilder = new StringBuilder();
                        
                        // First 3 columns as-is (from file2)
                        for (int i = 0; i < 3; i++)
                        {
                            rowBuilder.Append($"{EscapeCsvField(record2[i])},");
                        }
                        
                        // Compare columns 4-60
                        for (int i = 3; i < 60; i++)
                        {
                            string value1 = i < record1.Length ? record1[i] : "";
                            string value2 = i < record2.Length ? record2[i] : "";
                            bool isEqual = value1 == value2;
                            
                            rowBuilder.Append($"{EscapeCsvField(value1)},{EscapeCsvField(value2)},{(isEqual ? "MATCH" : "DIFFER")},");
                        }
                        
                        // Remove trailing comma and write row
                        writer.WriteLine(rowBuilder.ToString().TrimEnd(','));
                    }
                    else
                    {
                        // Record exists only in file2
                        var rowBuilder = new StringBuilder();
                        
                        // First 3 columns as-is (from file2)
                        for (int i = 0; i < 3; i++)
                        {
                            rowBuilder.Append($"{EscapeCsvField(record2[i])},");
                        }
                        
                        // Columns 4-60 with empty file1 values
                        for (int i = 3; i < 60; i++)
                        {
                            string value2 = i < record2.Length ? record2[i] : "";
                            rowBuilder.Append($",{EscapeCsvField(value2)},MISSING_IN_FILE1,");
                        }
                        
                        // Remove trailing comma and write row
                        writer.WriteLine(rowBuilder.ToString().TrimEnd(','));
                    }
                }
                
                Console.WriteLine($"Found {matchesFound} matching records between files");
                
                // Now add records from file1 that weren't in file2
                foreach (var kvp in file1Records)
                {
                    string uniqueId = kvp.Key;
                    string[] record1 = kvp.Value;
                    
                    if (!uniqueIdsProcessed.Contains(uniqueId))
                    {
                        var rowBuilder = new StringBuilder();
                        
                        // First 3 columns as-is (from file1)
                        for (int i = 0; i < 3; i++)
                        {
                            rowBuilder.Append($"{EscapeCsvField(record1[i])},");
                        }
                        
                        // Columns 4-60 with empty file2 values
                        for (int i = 3; i < 60; i++)
                        {
                            string value1 = i < record1.Length ? record1[i] : "";
                            rowBuilder.Append($"{EscapeCsvField(value1)},,MISSING_IN_FILE2,");
                        }
                        
                        // Remove trailing comma and write row
                        writer.WriteLine(rowBuilder.ToString().TrimEnd(','));
                    }
                }
            }
        }
        
        Console.WriteLine("Comparison complete! Results saved to: " + outputPath);
    }
    
    // Helper method to properly escape CSV fields
    private static string EscapeCsvField(string field)
    {
        if (string.IsNullOrEmpty(field))
            return "";
            
        if (field.Contains(",") || field.Contains("\"") || field.Contains("\n"))
            return $"\"{field.Replace("\"", "\"\"")}\"";
            
        return field;
    }
}
```